2008年10月26日
幾個好用的FireFox Ubiquity命令:shorten、goto和screengrab
介紹幾個好用的FireFox Ubiquity命令:shorten、goto和Screegrab。shorten以TinyURL.com、is.gd、bit.ly或hurl縮短網址,goto開啟網址或搜尋輸入的網址,screengrab則做網頁畫面的擷取(不須安裝附加元件),都是很方便的命令。
...繼續閱讀2007年11月13日
jQuery TreeView插件IE異常解決方法
為了在網頁裡以樹狀方式讓使用者選取,於是使用了jQuery的TreeView插件,沒想到運行在IE展開節點時有一塊區域會隨機性清空,但在FireFox裡卻又正常。癥狀如下:

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

Trace許久後終於解決了!沒想到竟然是註解標籤 <!-- 、 --> 造成問題。TreeView需要的<ul>、<li>結構是用Java程式由資料庫取出組成,為了方便偵錯而在</ul>後面都再上註解標籤,結果在IE裡造成異常。拿掉這些註解標籤後就正常了。
##
2007年09月29日
jQuery選擇器測試與範例
為了熟悉jQuery選擇器的使用,特別寫了一個測試網頁,以下是功能備忘。
在表單 FORM1 裡放入姓名、住址、電話等資料項目,項目形式有Text、Button、Select、TextArea等多種,再用幾個功能按鈕執行不同的過濾字串,最後把符合的項目ID顯示在網頁下方。
完整的程式請參考,檢視原始檔即可:
##
在表單 FORM1 裡放入姓名、住址、電話等資料項目,項目形式有Text、Button、Select、TextArea等多種,再用幾個功能按鈕執行不同的過濾字串,最後把符合的項目ID顯示在網頁下方。
- 項目要放在一個有序清單(Ordered List, ol)裡,因此用 $("<ol></ol>") 建立新的要素(等同於 document.createElement("ol") 。為方便後續操作使用此要素,將之存入變數$result。
- jQuery的命名慣例:jQuery的物件變數都以 $ 符號開頭,如上例中的$result就是一個jQuery物件。
- 清除jQuery物件的內容可使用remove() method,$result.remove( ),在執行操作前要把$result內容先清空,否則會讓清單越加越長。
- $result.append("HTML內容")會把字串附加到$result裡面。
- 針對表單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]") | 兩個條件都成立的項目才會被選到 |
| 5 | ID有2之項目 | $("FORM1 input[@id*='2']") | 開頭^、結尾$、含有*,這幾個符號和正規運算式相同,很好記憶 |
| 6 | ID以DUM開頭之項目 | $("FORM1 input[@id^='DUM']" |
完整的程式請參考,檢視原始檔即可:
##
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")則無法運作
2007年09月25日
方便查閱的jQuery 1.2 Cheat Sheet
如果你也在學習jQuery的話,Richard Augus整理了一個jQuery彙總表(Cheat Sheet),對於查閱相當方便;現有PDF和PNG兩個版本。
2007年09月24日
使用jQuery的效益
jQuery是個輕量級的JavaScript程式庫,輕量級的意思是它的程式庫極其精簡且很容易的能被使用,整合到現有程式裡也很簡便:只要在網頁程式<head>區加入<script src="/js存放路徑/jquery.js"></script>即可,而因應不同的環境,jquery.js檔案有幾種不同的格式可供使用:
和傳統的JavaScript寫法相比,我覺得使用jQuery有幾個效益:
| js檔名 | 檔案大小 | 用途 |
| jquery-1.2.1.js | 78.6KB | 使用於開發環境 |
| jquery-1.2.1-pack.js | 27KB | 使用Packer壓縮過的檔案,適用於正式運行環境;Xuite內使用的就是pack格式的檔案 |
| jquery-1.2.1-min.js | 45.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的程式庫較好
2007年09月12日
在Xuite測試 jQuery
2007年04月8日
變更MyBlogLog的onclick事件處理程式
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的問題吧...
## ...繼續閱讀
2007年04月5日
[HTML&CSS] 鎖定左側功能選單,不隨頁面捲動
為了把簡睿常用的工具網頁變更成更好閱讀的的樣式:用左右兩欄式,左側置放功能選單,右側則為主要 內容。為了方便套用,特別先製作一個簡單的樣板,在此留下記錄也提供給有相同需求的讀者參考。(按圖開新窗放大)
左側與右側各置放一個<div>,其ID分別為left與right,在left上在疊放另一個<div id="menu">,主要的控制就是把left的position設 定固定(fixed),這樣 就能把此區域鎖定在網頁上,不隨著右側內容的捲動而移動。IE則必須針對overflow做控制才能正確顯示。
測試網頁的執行請瀏覽這裡。
(樣板結構參考:http://www.pixelbeat.org/cmdline.html)
測試網頁源碼如下:
...繼續閱讀
