JavaScript分類文章 顯示方式:簡文 | 列表

2008年10月26日

幾個好用的FireFox Ubiquity命令:shorten、goto和screengrab

介紹幾個好用的FireFox Ubiquity命令:shorten、goto和Screegrab。shorten以TinyURL.comis.gdbit.lyhurl縮短網址,goto開啟網址或搜尋輸入的網址,screengrab則做網頁畫面的擷取(不須安裝附加元件),都是很方便的命令。

...繼續閱讀

Posted by emisjerry at 樂多Roodo!21:38回應(0)引用(0)

2007年11月13日

jQuery TreeView插件IE異常解決方法

為了在網頁裡以樹狀方式讓使用者選取,於是使用了jQuery的TreeView插件,沒想到運行在IE展開節點時有一塊區域會隨機性清空,但在FireFox裡卻又正常。癥狀如下:

Trace許久後終於解決了!沒想到竟然是註解標籤 <!-- 、 --> 造成問題。TreeView需要的<ul>、<li>結構是用Java程式由資料庫取出組成,為了方便偵錯而在</ul>後面都再上註解標籤,結果在IE裡造成異常。拿掉這些註解標籤後就正常了。

##

Posted by emisjerry at 樂多Roodo!22:01回應(1)引用(0)

2007年09月29日

jQuery選擇器測試與範例

為了熟悉jQuery選擇器的使用,特別寫了一個測試網頁,以下是功能備忘。

在表單 FORM1 裡放入姓名、住址、電話等資料項目,項目形式有TextButtonSelectTextArea等多種,再用幾個功能按鈕執行不同的過濾字串,最後把符合的項目ID顯示在網頁下方。
  1. 項目要放在一個有序清單(Ordered List, ol)裡,因此用 $("<ol></ol>") 建立新的要素(等同於 document.createElement("ol") 。為方便後續操作使用此要素,將之存入變數$result。
    • jQuery的命名慣例:jQuery的物件變數都以 $ 符號開頭,如上例中的$result就是一個jQuery物件。
  2. 清除jQuery物件的內容可使用remove() method,$result.remove( ),在執行操作前要把$result內容先清空,否則會讓清單越加越長。
  3. $result.append("HTML內容")會把字串附加到$result裡面。
  4. 針對表單FORM1操作的選擇器寫法:
操作功能選擇器說明
1找出所有項目$("#FORM1 :input")包含input、select、textarea、button等
2找出type='text'的項目$("#FORM1 :text") | | | 3 |找出type='hidden'的項目 |{{{$("#FORM1 input[@type='hidden']"):hidden是被隱藏的項目而不是Hidden類型的<input>項目,因此必須用指定屬性的寫法
4列出type='hidden'且有title屬性之項目$("#FORM1 input[@type='hidden'][@title]") 兩個條件都成立的項目才會被選到
5ID有2之項目$("FORM1 input[@id*='2']")開頭^、結尾$、含有*,這幾個符號和正規運算式相同,很好記憶
6ID以DUM開頭之項目$("FORM1 input[@id^='DUM']" 

完整的程式請參考,檢視原始檔即可:
##

Posted by emisjerry at 樂多Roodo!23:22回應(0)引用(0)

jQuery神奇的選擇器(Selector)

就像正規運 算式(Regular Expression)的Pattern match一般,jQuery使用了CSS(Cascading Style Sheet)、XPath(XML Path Language)與自訂等三大類的選擇器(Selector)當做$( )函數的參數,讓我們由複雜多樣的DOM結構裡,快速的找出符合樣式的要素。

使用選擇器的三個基本格式是:
格式 範例 說明
1 $("HTML標籤") $("div") 傳回表示所有div要素的jQuery物件
2 $("#要素的ID") $("#linksLeft") 傳回表示<div id="linksLeft">要素的jQuery物件
3 $(".要素的類別") $(".blogname") 傳回<div class="blogname">要素的jQuery物件

CSS選擇器

更完整的CSS Selector如下表:
樣 式 說明 範例
* 萬用選擇器(Universal selector);表示所有的要素 $("*")
E Type selectors;選取指定的要素類型 $("div") 選取所有的div要素
E > F Child selectors;選取E的子要素F $("div > li") 選取div要素裡的子要素li
E F Descendant selectors;選取E的後代要素F,子代、孫代、... $("div li")
E + F 套用緊鄰在E之後的要素F 範例在表格下面
E:first-child E是第一個子要素;這個表示方法似乎不是很直覺,容易被理解成是E的第一個子要素,但其實是:E是其父要素的第一個子要 素 $(".blogbody:first-child") 找到首頁第一篇文章
E:last-child E是其父要素的最後一個子要素 $(".blogbody:last-child") 找到首頁最後一篇文章
E:nth-child(n) E是其父要素的第n個子要素 $(".blogbody:nth-child(2)") 找到首頁第3篇文章(由0起算)
E:only-child E是唯一的子要素 $(".blogname:only-child")
E:empty E沒有任何的子要素 $("div:empty")
E:enabled 生效的要素E HTML標籤沒有被加上disabled
E:disabled 失效的要素E HTML標籤被加上disabled
E:checked 被勾選的要素E HTML標籤被加上chedked
E:selected 被選取的要素E HTML標籤被加上selected
E:not(s) 不屬於s的要素E $(".blogbody:not(blogbody_even)
E[@attr] 有指定屬性的要素E $("a[@href]) 找出所有的<a href="...">")
E[@attr=value] 屬性的值完全相同的要素E $("h3[@class=hdr]")
E[@attr^=value] 屬性的值以value開頭的要素E $("a[@href^=http://blog.xuite.net]")
E[@attr$=value] 屬性的值以value結尾的要素E $("a[@href$=.pdf]")
E[@attr*=value] 屬性的值含有value的要素E $("a[@href*=xuite.net]")
E[@attr1=value1]
[@attr2=value2
選取條件同時成立的要素E
  • E + F 範例:
 h2 + * { color:green } /*所有緊隨 h2 的要素内的文字皆為紅色 */
h1 + p { border-top: 3px solid #f60; }
  • HTML原始碼(標題會套用h1 + p):
<h1>標題</h1>
<p>段落 A</p>
<p>段落 B</p>
<p>段落 C</p>

自訂的選擇器

樣 式 說明 範例
:even 要素的偶數項 $("tbody tr:even").addClass("even")
:odd 要素的奇數項 $("tbody tr:odd").addClass("odd")
:eq(N) 第N項的要素 $("div.blogbody:eq(0)") 選第一篇文章
:gt(N) 大於第N項的要素 $("div.blogbody:gt(3)") 選第五篇(由0起算)~第十篇的文章(假設首頁只有十篇)
:lt(N) 小於第N項的要素 $("div.blogbody:lt(3)") 選第一篇至第三篇文章
:first 等於:eq(0),第一個要素 $("div.blogbody:first') 選第一篇文章
:last 最後的要素 $("div.blogbody:last") 第十篇文章
:parent 選取自己是父代的要素 $("div.blogbody:parent") 有子要素的文章會被選取
:contains("text") 選取含有指定文字的要素 $("div.title:contains('jQuery')") 找出有jQuery字串的標題
:visible 有呈現出的要素  
:hidden 隱藏了的要素  

表單的選擇器

樣 式 說明 範例
:input 選取所有的輸入要素,包含input、select、textara、 button等 $("#form1 :input")
:text 選取<input type="text">的要素  
:password 選取<input type="password">的要素  
:radio 選取<input type="radio">的要素  
:checkbox 選取<input type="checkbox">的要素  
:submit 選取<input type="submit">的要素  
:image 選取<input type="image">的要素  
:reset 選取<input type="reset">的要素  
:button 選取<input type="button">的要素  
:reset 選取<input type="reset">的要素  
:file 選取<input type="file">的要素  
  • 表單和選擇器之間至少要空一格,如: $("#fom1 :button")會生效,$("#form1:button")則無法運作
參考:http://docs.jquery.com/DOM/Traversing/Selectors#CSS_Selectors

Posted by emisjerry at 樂多Roodo!0:09回應(3)引用(0)

2007年09月25日

方便查閱的jQuery 1.2 Cheat Sheet

如果你也在學習jQuery的話,Richard Augus整理了一個jQuery彙總表(Cheat Sheet),對於查閱相當方便;現有PDF和PNG兩個版本。

Posted by emisjerry at 樂多Roodo!23:15回應(0)引用(0)

2007年09月24日

使用jQuery的效益

jQuery是個輕量級的JavaScript程式庫,輕量級的意思是它的程式庫極其精簡且很容易的能被使用,整合到現有程式裡也很簡便:只要在網頁程式<head>區加入<script src="/js存放路徑/jquery.js"></script>即可,而因應不同的環境,jquery.js檔案有幾種不同的格式可供使用:
js檔名檔案大小用途
jquery-1.2.1.js78.6KB使用於開發環境
jquery-1.2.1-pack.js27KB使用Packer壓縮過的檔案,適用於正式運行環境;Xuite內使用的就是pack格式的檔案
jquery-1.2.1-min.js45.3KB適用於正式運行環境; 似乎Server要搭配GZip才能達到更小的檔案大小

和傳統的JavaScript寫法相比,我覺得使用jQuery有幾個效益:
  • 大幅簡化存取DOM的要素的寫法;我們以取得Xuite的部落格名稱做範例
    • Xuite的部落格名稱並未指定ID,而是用class來定義:
<div class="blogname">
<a href="/emisjerry/tech">簡睿隨筆 《科技篇》</a>
<span class="blogemotion"></span>
<span class="blogfavo"></span>
</div>
  •  
    • 如果有指定ID的要素,可以直接用document.getElementById(ID)就取到,但在沒有ID的狀況下就必須用document.getElementsByTagName("div")先找出所有的div標籤,再用迴圈比對className,才能找到<div class="blogname">,即使把這些動作整理成一個函數來處理,也是頗為麻煩。
    • 而jQuery只要用CSS或XPath的語法很容易就能取到代表<div class="blogname">的jQuery物件: $(".blogname")
      • $( )是jQuery的函數,會回傳jQuery物件,透過此物件的諸多method,就能很輕易的存取DOM要素。例如用$(".blogname").children()可取出<div class="blogname">裡的子要素
      • CSS的類別放在StyleSheet的檔案裡是用點(.)開頭,ID是以井號(#)開頭,jQuery裡也是使用相同的寫法,例如用".blogname"表示類別blogname,$("#linksLeft")則存取ID為linksLeft的要素:<div id="linksLeft">
  • 簡化網頁特效的寫法;jQuery提供了許多特效method,例如toggle() (要素的顯示/隱藏切換)、slideToggle() (滑動式顯示/隱藏切換)等等
  • 簡化要素事件的寫法
    • 一般的寫法比較繁複一些:
  document.getElementById("linksLeft").onclick = function() {
alert("左邊Panel clicked!");
}
  •  
    • jQuery的寫法:
  $("linksLeft").click(function() {
alert("左邊Panel clicked!");
});
  •  
    •  
      • 驅動事件的onXXXX的on不必寫,把要處理的程式用匿名函數傳入
  • 簡化AJAX的處理寫法:這是原本使用jQuery的最主要原因,要自行處理AJAX的所有細節有點太浪費生命了,還是使用Open source的程式庫較好

Posted by emisjerry at 樂多Roodo!0:34回應(0)引用(0)

2007年09月12日

在Xuite測試 jQuery

如果您發現最近我的網誌似乎怪怪的,請別懷疑或擔心,因為最近正在Xuite上測試jQuery的功能。Xuite不知何時開始已使用了jQuery的AJAX功能,雖然版本不是昨天剛推出的1.2版而是1.1.2,但對我這個初學者而言應該是夠用了。

目前的目標是把原先純粹用JavaScript寫的擴充功能用jQuery重新實作,透過這樣的練習應該能很快掌握jQuery的精髓吧。順道一提,jQuery的專案開發網站也是使用Trac與Subversion在管理的。它使用的標誌似乎是河內之塔的模樣,不知有何特殊含義?



##


Posted by emisjerry at 樂多Roodo!19:20回應(0)引用(0)

2007年04月8日

變更MyBlogLog的onclick事件處理程式

重新又把MyBlogLog 加回網頁。但當點擊訪客頭像圖形時,目前網頁會被訪客的MyBlogLog個人網頁給取代,當想要觀察多個訪客資訊時實在很麻煩,因此在 window.onload裡用下列指令把頭像圖形的onclick事件改成使用window.open,而形成以新視窗(或新分頁)的呈現方式。

程式片段:

## ...繼續閱讀

Posted by emisjerry at 樂多Roodo!17:07回應(0)引用(0)

IE和FireFox存取同名物件有不同的作法

將 部 落格 加上動態放大與縮小字體大小的功能這篇文章裡敘述了放 大與縮小文章內容字體大小的功能按鈕,這個功能在FireFox裡運作得很正常,但IE則無法運作,今天終於找到問題: Xuite日誌在<head>區裡放了一個名為content的<INPUT>物件(<input type='Hidden' name='content'>),和放置文章內容的區域名稱(<div id='content'>) 衝突到了!我解決的方法是判斷瀏覽器,當使用IE時把要作用的控制項改成content的上一層mid,如此在IE裡也能正常運作了。接著寫了簡單的 script來驗證此問題之癥結。


<input type="hidden" name="TEXT1" title="Hidden TEXT1">  <!-- First TEXT1 -->
<div id="TEXT1" title="Div TEXT1"> <!-- Second TEXT1 -->
  document.getElementById difference between IE & FF
</div>

<script>
  var obj = document.getElementById('TEXT1');
  document.write("obj title=" + obj.title);
</script>

以下的script在網頁上放了兩個名稱同為TEXT1的物件,當使用document.getElementById('TEXT1')取物件時,在 IE 6裡取到的是第一個,而FireFox則取到第二個。這個應該是IE的問題吧...

## ...繼續閱讀

Posted by emisjerry at 樂多Roodo!15:40回應(0)引用(0)

2007年04月5日

[HTML&CSS] 鎖定左側功能選單,不隨頁面捲動

Division fixed

為了把簡睿常用的工具網頁變更成更好閱讀的的樣式:用左右兩欄式,左側置放功能選單,右側則為主要 內容。為了方便套用,特別先製作一個簡單的樣板,在此留下記錄也提供給有相同需求的讀者參考。(按圖開新窗放大)



左側與右側各置放一個<div>,其ID分別為left與right,在left上在疊放另一個<div id="menu">,主要的控制就是把left的position設 定固定(fixed),這樣 就能把此區域鎖定在網頁上,不隨著右側內容的捲動而移動。IE則必須針對overflow做控制才能正確顯示。

測試網頁的執行請瀏覽這裡
(樣板結構參考:http://www.pixelbeat.org/cmdline.html)

測試網頁源碼如下:
...繼續閱讀

Posted by emisjerry at 樂多Roodo!20:37回應(0)引用(0)
 [1]  [2]  [最終頁]