jQuery 的 selector 主要有三種, 其目的在於選擇 HTML 中的元素:
1. HTML Tag - 例如 $('p')
可以選取所有
元素
2. 元素 ID - 例如 $('#myId')
選取 ID 為 myId 的特定元素
3. CSS 類別 - 例如 $('.myClass')
選取所有套用 myClass 類別的元素
在 jQuery 中就只有這三種標示法。不過如果事情那麼簡單的話, 我也不用花工夫來寫這篇文章了。事實上 jQuery 在以上三種選擇器之外, 又另外提供複雜而又功能強大的組合標示語法, 配合它的隱含迴圈運算, 讓我們可以更精準的選擇到我們想要的各種 HTML 元素; 我把這些組合標示語法整理如下:
Basic Selector
| 語法 | 範例 | 說明 |
| * | $( ' * ' ) | All Selector - 選取所有文件中的元素 |
| .class | $( ' .myClass ' ) | Class Selector - 選取所有套用指定 CSS 類別的元素 |
| tag | $ ( ' div ' ) | Element Selector - 選取類型為指定 tag 的元素 |
| ID | $ ( ' #myId ' ) | ID Selector - 選取指定 ID 的元素 |
| a, b, c, ... | $ ( ' .myClass, div, #myId ' ) | Multiple Selector - 以逗點區隔以選取各元素的聯集 |
Hierarchy
| 語法 | 範例 | 說明 |
| a > b | $( ' table > th ' ) | Child Selector - 選取 a 的下一層的直屬子元素 b 的集合 |
| a b | $( ' table th ' ) | Descendant Selector - 選取 a 的子代元素 b 的集合 |
| a + b | $( ' body + table ' ) | Next Adjacent Selector - 選取緊跟著 a 元素的 b 元素; 如範例中是選取 body 之下的第一個 table |
| a ~ b | $( ' p ~ span ') | Next Siblings Selector - 選取 a 以下的所有 b 元素; 這個 b 元素必須符合 sibling 篩選條件 |
Basic Filter
| :first | $( ' ul li:first ' ) | First Selector - 選取篩選的集合中的第一個元素 |
| :last | $( ' ul li:last ' ) | Last Selector - 選取篩選的集合中的最後一個元素 |
| :not(a) | $( ' input:not(:checked) ' ) | Not Selector - 選取篩選的集合中不符合條件的所有元素 |
| :odd | $( ' ul li:odd ' ) | Odd Selector - 選取篩選的集合中所有排列順序為奇數的元素(注意: 由0起算) |
| :even | $( ' ul li:even ' ) | Even Selector - 選取篩選的集合中所有排列順序為偶數的元素(注意: 由0起算) |
| :eq(n) | $( ' ul li:eq(n) ' ) | eq Selector - 選取篩選的集合中從頭算起第幾個元素(注意: 由0起算) |
| :gt(n) | $( ' ul li:gt(n) ' ) | gt Selector - 選取篩選的集合中所有排列順序大於n的元素(注意: 由0起算) |
| :lt(n) | $( ' ul li:lt(n) ' ) | lt Selector - 選取篩選的集合中所有排列順序小於n的元素(注意: 由0起算) |
| :animated | $( ' ul:animated ' ) | Animated Selector - 選取篩選的集合中所有正在進行動畫處理過程中的元素 |
| :header | $( ' :header ' ) | Header Selector - 選取篩選的集合中所有標示為標題(如 h1, h2 等)的元素 |
Content Filter
| :has(a) | $( ' div:has(p) ' ) | Has Selector - 選取元素之子元素內包含至少一個符合篩選條件的元素; 在範例中, 找到所有內含 p 元素的 div 元素 |
| :contains(text) | $( ' :contains(hello) ' ) | Contains Selector - 選取內容文字中包含指定字串的元素 |
| :empty | $( ' :empty ' ) | Empty Selector - 選取無任何子元素(包括文字節點)的元素 |
| :parent | $( ' li:parent ' ) | Parent Selector - 選取指定元素(包括文字節點)的所有父節點元素 |
Visibility Filter
| :hidden | $( ' div:hidden ' ) | Hidden Selector 選取被隱藏而不可見 (設定 "visibility:hidden" 或 "display:none" 或 width/height 被設定為 0, 或者因父代元素被設定為隱藏而不可見等等) 的元素 |
| :visible | $( ' div:visible ' ) | Visible Selector 選取非隱藏的元素 (實際上是根據瀏覽器傳回的 offsetWidth 及 offsetHeight 的值是否大於 0 而決定) |
Form
| :input | $( ' :input ' ) | Input Selector - 選選取所有名為 input 的 tag, 包括 select, textarea 與 button 等 |
| :text | $( ' :text ' ) | Text Selector - 選取所有類型為 “text” 的元素 |
| :password | $( ' :password ' ) | Password Selector - 選取所有類型為“password”的元素 |
| :radio | $( ' :radio ' ) | Radio Selector - 選取所有類型為“radio”的元素 |
| :checkbox | $( ' :checkbox ' ) | Checkbox Selector - 選取所有類型為“checkbox”的元素 |
| :submit | $( ' :submit ' ) | Submit Selector - 選取所有類型為“submit”的元素 |
| :image | $( ' :image ' ) | Image Selector - 選取所有類型為“image”的元素 |
| :reset | $( ' :reset ' ) | Reset Selector - 選取所有類型為“reset”的元素 |
| :file | $( ' :file ' ) | File Selector - 選取所有類型為“file”的元素 |
| :button | $( ' :button ' ) | Button Selector - 選取所有類型為“button”的元素 |
| :enabled | $( ' :enabled ' ) | Enabled Selector - 選取所有被 enabled 的元素 |
| :disabled | $( ' :disabled ' ) | Disabled Selector - 選取所有被 disabled 的元素 |
| :selected | $( ' :selected ' ) | Selected Selector - 選取所有被 selected 的元素 |
| :checked | $( ' :checked ' ) | Checked Selector - 選取所有類型為 "radio" 或 "checkbox" 的元素 |
Child Filter
| :first-child | $( ' ul li:first-child ' ) | First-child Selector - 選取集合中的第一個子元素 |
| :last-child | $( ' ul li:last-child ' ) | Last-child Selector - 選取集合中的最後一個子元素 |
| :only-child | $( ' div p:only-child ' ) | Only-child Selector - 選取一個本身為其父元素之唯一子元素的元素 |
| :nth-child(n) | $( ' ul li:nth-child(n) ' ) | nth-child Selector - 選取指定元素的第 n 個子元素 (從1起算) |
| :nth-child(odd) | $( ' ul li:nth-child(odd) ' ) | 選取指定元素的所有奇數個子元素 (從1起算) |
| :nth-child(even) | $( ' ul li:nth-child(even) ' ) | 選取指定元素的所有偶數個子元素 (從1起算) |
| :nth-child(formula) | $( ' ul li:nth-child(3n) ' ) | 選取指定元素的每 n 個子元素 (從1起算); 在範例中是指定每三個子元素 |
Attribute
| [attribute] | $( ' [href] ' ) | Has Attribute Selector - 選取包含指定 attribute 的所有元素; 範例中會選取所有內含 href 這個 attribute 的元素 |
| [attribute=value] | $( ' [rel=external] ' ) | Attribute Equals Selector - 選取所有包含指定的 attribute 文字的元素; 範例中會選取所有 ref 這個 attribute 之文字為 "external" 的元素 |
| ['attribute!=value'] | $( ' [rel!=external] ' ) | Attribute Not Equal Selector - 與上一項目相反; 選取所有不包含指定的 attribute 文字的元素; 範例中會選取所有 ref 這個 attribute 之文字不是 "external" 的元素” |
| [attribute^=value] | $( ' [class^=open] ' ) | Attribute Starts With Selector - 選選取所有內含指定 attribute, 且其內容以指定文字起頭的元素; 範例中會選取所有 class 這個 attribute 是以 "open" 字樣起頭者 |
| [attribute$=value] | $( ' [id$=-wrapper] ' ) | Attribute Ends With Selector - 與上一項目相反; 選選取所有內含指定 attribute, 且其內容以指定文字結尾的元素; 範例中會選取所有 id 這個 attribute 是以 "-wrapper" 字樣結尾者 |
| [attribute*=value] | $( ' [class*=offer] ' ) | Attribute Contains With Selector - 選取所有內含指定 attribute, 且其內容包含有指定文字的元素; 範例中會選取所有 class 這個 attribute 內含 "offer" 字樣者 |
| [attribute~=value] | $( ' [class~=offer] ' ) | Attribute Contains Word Selector - 選取所有內含指定 attribute, 且其內容包含有指定英文字的元素(以空白或行首/末區隔); 範例中會選取所有 class 這個 attribute 內含 "offer" 字樣者; 可以取到 class="my offer", 但取不到 class="myoffer" |
| [a1=b1][a2=b2] | $( ' [class=noshow] [id=myId] ' ) | Multiple Attribute Selector - 選取符合多個篩選條件的交集的元素 |
* 註: 為了提高辨識度, 我在以上範例中都為引號前後加上了不必要的空白; 這不表示我們需要在程式中也這麼做
以上是我所做的總整理; 如果你有興趣, 也可以參考官網上的說明。