本人的兩篇原創文章純乾貨!一切關於jquery選擇器和純乾貨!jQuery之DOM操做解析,發佈不到1個月,就被博客園某帳號 認領 爲他的原創,而且他還精心地將慕課網原創文章的版權聲明和文章中關於個人點點滴滴,刪除地乾乾淨淨,很專業。我不打算貼出他的帳號,只是但願部分程序員能學會尊重他人的版權。jquery
版權聲明,文章首發於本人慕課網帳號:人生還有多少個二十年,歡迎轉載,轉載請註明出處程序員
如下是我的對jQuery選擇器的總結,內容並不詳細,建議讀者閱讀時結合jQuery相關的參考文檔或書籍,本文主要着眼於一些易錯點,同時將一些選擇器和方法聯繫起來,文中不免會有些錯誤,敬請批評指正。app
jQuery的選擇器能夠分爲如下的四類:ui
(一) 基本選擇器spa
1. ID選擇器 eg: $(「#nav」)選取ID爲nav的元素 2. 類選擇器 eg: $(「.fruit」)選取class爲fruit 的元素 3. 標籤選擇器 eg: $(「p」)選取全部的p元素 4. 通用選擇器 eg: $(「*」)選取全部的元素 5. 羣組選擇器 eg: $(「li,span.active」)選取全部li元素和class爲active的span元素
(二) 層次選擇器code
1. 子選擇器$( "parent > child" ):選取全部指定元素的直接後代元素,即子元素,能夠用children()代替它。 eg: $(「body>div」)至關於$(「body」).children(「div」); 2. 後代選擇器$("ancestor descendant"):選取給定的祖先元素的全部後代元素,能夠用find()代替它 eg: $(「ul li」)至關於$(「ul」).find(「li); 3. 相鄰兄弟選擇器$("prev + next"):選取全部緊接在「prev」元素後的「next」元素,能夠用next()替代它。 eg : $(「a+ul」)至關於$(「a」).next(); 相鄰兄弟選擇器要知足三個條件: 1)它們必須是兄弟,即他們的父元素爲同一個 2)next必須在prev後面 3)它們必須相鄰 4. 通常兄弟選擇器 $("prev ~ siblings"),選取「prev」元素以後的全部兄弟元素,能夠用nextAll()代替它。 eg : $(「a~span」)至關於$(「a」).nextAll("span"); 通常兄弟選擇器兩個條件: 1.它們必須是兄弟,即他們的父元素爲同一個 2.siblings必須在prev後面 Attentions: 1)siblings()能夠跟同輩的元素匹配,不管位置的前後。 next()只能跟緊隨其後的一個同輩元素匹配 nextAll()只能跟其後的同輩元素匹配 2)區分$(「ul.active」)和$(「ul .active」) 兩者的差異在於空格,前者會被解析爲「獲取class爲active的ul元素」,然後者則是「獲取ul元素的後代元素中class爲active的元素」
(三) 過濾選擇器對象
1. 基本過濾選擇器 1):first/:last 2):even/:odd/:eq()/:gt()/:lt() 3):not() Attentions: 1.:first,:last,:eq()都只能選擇一個元素 2.:even,:odd,:eq(),:gt(),:lt()都是靠索引來選擇元素的,並且索引的起始值都爲0,而:nth-child()的索引發始值爲1。 如下舉幾個例子: (1)tr:even選取的是索引爲偶數(0,2,4,6...)的行,即奇數行(第1,3,5,7...行) (2)div:eq(2)選取的是索引爲2的div元素,即第3個div元素 (3)span:lt(2)選取的是索引小於2的span元素,索引爲0,1的元素,也就是說,選擇的是第1個和第2個span 3. eq(0)至關於:first,eq(-1)至關於:last 4. :first至關於.first(),:last至關於.last(),:eq()至關於.eq(),:not()至關於.not() 2. 內容過濾選擇器 $(":contains(text)")是根據元素所包含的文原本篩選的 $(":has(selector)")是根據元素所包含的選擇器來篩選的 $(":parent")選擇的是包含子元素或文本的元素 $(":empty")跟$(":parent")徹底相反,選擇的是既不包含子元素,又不包含文本的元素 3. 可見性過濾選擇器 :visible :hidden Attentions: 1) 若是元素佔據文檔必定的空間,則被認爲是可見的,同理,不佔空間則視爲不可見。 2) visibility爲hidden, opacity爲0的元素爲可見 4. 屬性過濾選擇器 [attribute] [attribute=value]/[attribute!=value] [attribute^=value]/[attribute$=value] [attribute*=value] [attrSel1][attrSel2][attrSelN] [attribute=value] [attribute~=value] eg: $(「[title]」)選中有title屬性的元素 $(「[title=’apple’]」)選中有title屬性值爲apple的元素 $(「[title!=’apple’]」)選中有title屬性值不爲apple的元素 $(「[title^=’a’]」)選中有title屬性值以a開頭的元素 $(「[title$=’a’]」)選中有title屬性值以a結尾的元素 $(「[title*=’a’]」)選中有title屬性值中含有a的元素 $(「[title][id][src]」)選中同時具備title,id和src屬性的元素 $(「[title=’a’]」)選中有title屬性值爲a或者title屬性值以a爲前綴的元素 $(「[title~=’a’]」)選中title屬性值用空格分隔的值中含有a的元素 5. 子元素過濾選擇器 :first-child/:last-child :nth-child()/:nth-last-child() :only-child Attentions: 1)區分:nth-child(n) 與 :nth-last-child(n) 前者是從前日後計算,後者從後往前計算 2):first-child至關於nth-child(1),:last-child至關於nth-last-child(1) 3)全部的選擇器都只能日後選,往下選,要實現往前選,往上選,則要利用一些現成的方法。eg : parent(),closest() 4)區分:first/:first-child,:last/:last-child,:eq()/:nth-child() 這三對選擇器的差異是相似的,下面就:eq()/:nth-child()作個說明: :eq()的索引是以0開始的,而且只能選中一個元素,而:nth-child()的索引是以1開始的,而且可以選中多個元素。 6. 表單對象屬性過濾選擇器 1):enables/:disabled 2):checked/:selected
(四) 表單選擇器索引
1. :input選取全部的<input>、<textarea>、<select>、<button>元素 2. :text, :password , :radio , :checkbox , :submit , :image , :reset , :button , :file , :hidden Attentions: 1).除了:input篩選選擇器,幾乎每一個表單類別篩選器都對應一個input元素的type值。大部分表單類別篩選器可使用屬性篩選器替換。好比 $(':password') == $('[type=password]') 2).區分$(「input」)和$(「:input」) $(「input」)獲取的是<input>元素,而:input選取全部的<input>、<textarea>、<select>、<button>元素