E,F,G 一個類型為 E 的 element,一個類型為 F 的 element,一個類型為 G 的 element(用於選擇多個 element) 1.2 jQuery 支援,但(跟 CSS 規範)有所不同的選取器文法
不同之處是必須在屬性名稱前加上符號“@”
- E[@foo] 一個類型為 E 的 element,它具有屬性“foo”
- E[@foo=bar] 一個類型為 E 的 element,它具有屬性“foo = bar”
- E[@foo^=bar] 一個類型為 E 的 element,它具有屬性“foo“,並且其屬性值是以”bar“開頭的
- E[@foo$=bar] 一個類型為 E 的 element,它具有屬性“foo“,並且其屬性值是以”bar“結尾的
- E[@foo*=bar] 一個類型為 E 的 element,它具有屬性“foo“,並且其屬性值包含”bar“
- E[@foo=bar][@baz=bop] 一個類型為 E 的 element,它具有屬性“foo = bar”和屬性”baz = bop“
註:以上的“bar”和“bop”均為字串。
1.3 jQuery 不支援的選取器文法(略)
因為沒什麼實際的作用,所以這裡也不作贅述,想瞭解詳情的可以參閱官方協助文檔。
1.4 Contex 和 Anchoring
可以設定 contex 來 anchor(定位) 選取器,這也是 jQuery 跟 CSS 規範的一個不同之處。使用者可以使用文法: $(expr, context) 來設定 context root。預設的 context root 是整個文檔。
2. XPath 選取器(XPath Selectors)
XPath 也是 jQuer 支援的選取器文法之一。jQuery 支援基本的 XPath 文法。下面以一些例子作說明。
2.1 定位路徑(Location Paths)
$(”/html/body//p”) $(”body//p”) $(”p/../div”)
- 相對路徑,相對於設定的 context node
“this”
$(”p/*”, this) $(”/p//a”, this)
2.2 支援 Axis 選取器
- “//” : 子孫 elements (div 所有類型為 p 的子孫 elements)
$(”/div//p”) $(”//div//p”)
- “/” : 子 elements (div 所有類型為 p 的子 elements)
$(”//div/p”)
- “~” : 兄弟 elements (div 所有類型為 form 的兄弟 elements)
$(”//div ~ form”)
- ““..”: 父 elements (div 的父 element 下的類型為 p 的子 elements)
$(”//div/../p”)
2.3 支援謂詞文法(Predicates)
$(”//input[@foo]”)
- [@foo=’test’] 具有屬性“foo = ‘test’”
$(”//a[@foo = ‘tsxt’]”)
- [Nodelist] 其子孫 elements 匹配 Nodelist(用於過濾)
$(”//div[p]”) $(”//div[p/a]”)
2.4 jQuery 支援,但(跟 XPath 規範)有所不同的謂詞文法(Predicates)
- [last()] or [position()=last()] becomes :last(選擇結果集中的最後一個 element)
$(”p:last”)
- [0] or [position()=0] becomes :eq(0) or :first(選擇結果集中的第個 element)
$(”p:first”) $(”p:eq(0)”)
- [position() < 5] becomes :lt(5)(選擇結果集中索引大於5的 elements)
$(”p:lt(5)”)
- [position() > 2] becomes :gt(2)(選擇結果集中索引小於2的 elements)
$(”p:gt(2)”)
註:“becomes” 前面的是 XPath 的 predicates 文法,後面是等價的 jQuery 文法。
3. jQuery 自訂的選取器(Custom Selectors)
jQuery 具有一些自訂的選取器文法,這些文法雖然並不在 CSS 和XPath 規範之內,但它們相當的便捷,所在 jQuery 將它們囊括進來。
3.1 自訂選取器(Custom Selectors)
- :even 結果集中其索引為偶數(雙數)的 elements
- :odd 結果集中其索引為奇數(單數)的 elements
- :eq(N) and :nth(N) 選擇結果集中索引為 N 的 elements
- :gt(N) 選擇結果集中索引大於 N 的 elements
- :lt(N) 選擇結果集中索引小於 N 的 elements
- :first 選擇結果集中的第一個 element (相當於 eq(0) 或者 nth(0))
- :last 選擇結果集中的最後一個 element
- :parent 在結果集中選擇 elements,它必須具有子 elements(包括文本節點)(跟 :empty 相反)
- :contains(’test’) 選擇結果集中包含有指定文本的 elements
- :visible 選擇所有可見(visible)的 elements( display 屬性的值等於 visible、block、inline,或者 visibility 屬性的值等於 visible,不包括 hidden 類型的 elements(關於 hidden 類型,如<input type=”hidden” …>))
- :hidden 選擇所有隱藏(visible)的 elements( display 屬性的值等於 none,或者 visibility 屬性的值等於 hidden,不包括 hidden 類型的 elements(關於 hidden 類型,如<input type=”hidden” …>))
例子:
$(”p:first”).css(”fontWeight”,”bold”); $(”div:hidden”).show(); $(”/div:contains(’test’)”, this).hide();
3.2 表單選取器(Form Selectors)
- :input 選擇所有表單 elements(input, select, textarea, button)
- :text 選擇所有文本域 (type=”text”).
- :password 選擇所有密碼域 (type=”password”).
- :radio 選擇所有選項按鈕 (type=”radio”).
- :checkbox 選擇所有複選框 (type=”checkbox”).
- :submit 選擇所有提交按鈕 (type=”submit”).
- :image 選擇所有映像域 (type=”image”).
- :reset 選擇所有重設按鈕 (type=”reset”).
- :button 選擇所有按鈕 (type=”button”).
- :file 選擇所有 <input type=”file”>.
:hidden 也是可用的,在上面的3.1 節有介紹。
建議在使用表單選擇時提供一個 context root,例子:
$(’#myForm :input’)
$(’input:radio’, myForm)
上面最後的一行語句將會選擇所有的“myForm”表單裡的所有選項按鈕,相當於[@type=radio](即 $(”[@type = radio],myForm”)),但用表單選取器會稍微快點,尤其對於大型的表單。
3.3 更多選取器
jQuery 選取器可以通過第三方的外掛程式來擴充:
- More Selectors Plugin
- Mike Alsup on Custom Selectors
- Patch to allow selection by CSS property (full plugin to be released simultaneously with 1.1)
參考資料:
http://docs.jquery.com/DOM/Traversing/Selectors