鋒利的 jQuery | 第2章_jQuery 選擇器

選擇器是 jQuery 的根基,在 jQuery 中誉裆,對(duì)事件處理、遍歷 DOM 和 Ajax 操作都依賴于選擇器恍涂。如果能熟練地使用選擇器宝惰,不僅能簡化代碼,而且可以達(dá)到事半功倍的效果再沧。


jQuery選擇器是什么

CSS選擇器

選擇器 語法 描述 示例
標(biāo)簽選擇器 E{ CSS 規(guī)則 } 以文檔元素作為選擇器 div{ color: #FFF }
ID選擇器 #ID{ CSS規(guī)則 } 以文檔元素的唯一標(biāo)識(shí)符 ID 作為選擇器 #box{color: #FFF}
類選擇器 E.name{ CSS規(guī)則 } 元素的 class 作為選擇器 div.name{ color: #FFF } .name{ color: #FFF }
群組選擇器 E1,E2,E3 { CSS規(guī)則 } 多個(gè)選擇符應(yīng)用同樣的樣式規(guī)則 a,p,div{ color: #FFF }
后代選擇器 E F { CSS規(guī)則 } 元素 E 的任意后代元素 F #box a{ color: #FFF }
通配選擇符 *{ CSS規(guī)則 } 該文檔的所有元素作為選擇符 *{ font-size:12px }

jQuery選擇器

jQuery中的選擇器完全繼承了 CSS 的風(fēng)格尼夺。利用 jQuery 選擇器,可以非常便捷和快速地找出特定的 DOM 元素炒瘸,然后為它們添加相應(yīng)的行為淤堵,而無需擔(dān)心瀏覽器是否支持這一選擇器


jQuery選擇器的優(yōu)勢

  • 簡潔的寫法:$("#id")
  • 支持CSS 1到CSS 3選擇器 :XPath 選擇器需要查件
  • 完善的處理機(jī)制:
    • 獲取網(wǎng)頁中不存在的元素也不會(huì)報(bào)錯(cuò)
    • 獲取的永遠(yuǎn)是對(duì)象
    //判斷元素有無
    //根據(jù)長度判斷
    if($("#id").length>0){
        //
    }    
    //轉(zhuǎn)換成 DOM 對(duì)象來判斷
    if($("#id")[0]){
        //
    }

jQuery 選擇器

基本選擇器

選擇器 描述 返回 實(shí)例
#id 根據(jù)給定 id 匹配一個(gè)元素 單個(gè)元素 $("#test")選取 id 為 test 的元素
.class 根據(jù)給定類名匹配元素 集合元素 $(".test")選取所有 class 為 test 的元素
element 根據(jù)給定元素名匹配元素 集合元素 $("p")選取所有 <p> 元素
* 匹配所有元素 集合元素 $("*")選取所有的元素
selector1,selector2,... selectorN 將每個(gè)選擇器匹配到的元素合并后一起返回 集合元素 $("div,span,p.myCalss")選取所有的<div>,<span>和擁有 class 為 myClass 的<p>標(biāo)簽的一組元素

層次選擇器

選擇器 描述 返回 實(shí)例
$("ancestor descendant") 選取 ancestor 元素里的所有 descendant(后代)元素 集合元素 $("div span")選取 div 里所有 span 的元素
$("parent>clild") 選取 parent 元素下的 child(子)元素 集合元素 $("div>span")選取 div 元素下元素名是 span 的子元素
$("prev+next") 選取緊挨在 prev 元素后的 next 元素 集合元素 $(".one+div")選取 class 為 one 的下一個(gè) div 同輩元素
$("prev~sibling") 選取 prev 元素之后的所有 sibling元素 集合元素 $("#two~div")選取 id 為 tow 的元素后面的所有 div 同輩元素

等價(jià)關(guān)系

$("#prev?div")選擇器只能選擇“prev”元素后面的同輩<div>元素。而 siblings()方法與前后位置無關(guān)顷扩,只要是同輩節(jié)點(diǎn)就都能匹配

選擇器 方法
等價(jià) $(".one +div") $(".one").next("div")
等價(jià) $("#prev~div") $("#prev").nextAll("div")

過濾選擇器

基本過濾選擇器

選擇器 描 述 返回 實(shí)例
:first 選取第一個(gè)元素 單個(gè)元素 $("div:first")選取 div 元素里第一個(gè) div 元素
:last 選取最后一個(gè)元素 單個(gè)元素 $("div:last")選取 div 元素里最后一個(gè) div 元素
:not(selector) 去除所有與給定選擇器匹配的元素 集合元素 $("input:not(.myClass)")選取 class 不是 myClass 的 input 元素
:even 選取索引是偶數(shù)的所有元素拐邪,索引從 0 開始 集合元素 $("input:even")選取索引是偶數(shù)的 input 元素
:odd 選取索引是奇數(shù)的所有元素,索引從 0 開始 集合元素 $("input:odd")選取索引是奇數(shù)的 input 元素
:eq(index) 選取索引等于 index 的元素(index從0開始) 單個(gè)元素 $("input:eq(3)")選取索引等于 3 的 input 元素
:gt(index) 選取索引大于 index 的元素(index從0開始) 集合元素 $("input:gt(3)")選取索引大于 3 的 input 元素(大于而不包括)
:lt(index) 選取索引小于 index 的元素(index從0開始) 集合元素 $("input:lt(3)")選取索引小于 3 的 input 元素(小于而不包括)
:header 選取所有的標(biāo)題元素h1~h6 集合元素 $(":header")選取網(wǎng)頁中所有的標(biāo)題元素
:animated 選取當(dāng)前正在執(zhí)行動(dòng)畫的所有元素 集合元素 $("div:animated")選取正在執(zhí)行動(dòng)畫的 div
:focus 選取當(dāng)前獲取焦點(diǎn)的元素 集合元素 $(":focus")選取當(dāng)前獲取焦點(diǎn)的元素

內(nèi)容過濾選擇器

過濾規(guī)則主要體現(xiàn)在它所包含的子元素或文本內(nèi)容上

選擇器 描 述 返回 實(shí)例
:contains(text) 選取含有文本內(nèi)容為“text”的元素 集合元素 $("div:contains("我")")選取含有文本“我”的 div 元素
:empty 選取不包含子元素或文本內(nèi)容的空元素 集合元素 $("div:empty")選取不包含子元素(包括文本)的 div 元素
:has(selector) 選取含有選擇器所匹配的元素的元素 集合元素 $("div:has(p)")選取含有 p 標(biāo)簽的 div 元素
:parent 選取含有子元素或者文本的元素 集合元素 $("div:parent")選取擁有子元素(包括文本)的 div 元素

可見性過濾選擇器

根據(jù)元素的可見和不可見狀態(tài)來選擇相應(yīng)的元素

選擇器 描 述 返回 實(shí)例
:hidden 選取所有不可見的元素 集合元素 $(":hidden")選取所有不可見的元素(包括 display:none;visibility:hidden)
:visible 選取所有可見的元素 集合元素 $("div:visible")選取所有可見的 div

屬性過濾選擇器

過濾規(guī)則是通過元素的屬性來獲取相應(yīng)的元素

選擇器 描 述 返回 實(shí)例
[attribute] 選取擁有此屬性的元素 集合元素 $("div[id]")選取擁有屬性 id 的元素
[attribute=value] 選取屬性值為 value 的元素 集合元素 $("div[title=test]")選取屬性 title 為 test 的 div 元素
[attribute!=value] 選取屬性值不等于 value 的元素 集合元素 $("div[title!=test]")選取屬性 title 不等于 test 的 div 元素(沒有屬性 title 的 div 也選劝亍)
[attribute^=value] 選取屬性值以 value 開始的元素 集合元素 $("div[title^=test]")選取屬性 title 以 test 開始的 div 元素
[attribute$=value] 選取屬性值以 value 結(jié)束的元素 集合元素 $("div[title$=test]")選取屬性title 以 test 結(jié)束的 div 元素
[attribute*=value] 選取屬性值包含 value 的元素 集合元素 $("div[title*=test]")選取屬性 title 含有 test 的 div 元素
[attribute l=value] 選取屬性等于給定字符串或者以該字符串為前綴的元素 集合元素 $("div[title l='en']")選取屬性 title 等于或以 en 為前綴的 div 元素(等于或?yàn)榍熬Y('-'))
[attribute-=value] 選取屬性用空格分隔的值中包含一個(gè)給定值得元素 集合元素 $("div[title-="uk"]")選取屬性 title 用空格分隔的值中包含字符 uk 的元素
[attribute1][attribute2][attributeN] 用屬性選擇器合并成一個(gè)復(fù)合屬性選擇器,滿足多個(gè)條件 集合元素 $("div[id][title$='test']")選取擁有屬性 id扎阶,并且屬性title以 test 結(jié)束的 div 元素

子元素過濾選擇器

過濾規(guī)則相對(duì)于其它的選擇器稍微有些復(fù)雜,不過沒關(guān)系技俐,只要將元素的父元素和子元素區(qū)分清楚乘陪,那么使用起來也非常簡單

選擇器 描 述 返回 實(shí)例
:nth-child(index/even/odd/equation) 選取每一個(gè)父元素下的第 index 個(gè)子元素或者奇偶元素(index 從 0 開始) 集合元素 nth-child(index)從 1 開始匹配所有 eq(index)從 0 開始,只匹配一個(gè)元素
:first-child 選取每個(gè)父元素的第一個(gè)子元素 集合元素 :first 只返回單個(gè)元素雕擂;:first-child 選擇符將返回每一個(gè)父元素匹配的第一個(gè)子元素
:last-child 選取每一個(gè)父元素的最后一個(gè)子元素 集合元素 同上
:only-child 如果某個(gè)元素是父元素唯一的子元素,就會(huì)被匹配贱勃;還含有其他元素井赌,就不會(huì)匹配 集合元素 $("ul li:only-child" 在 ul 中選取是唯一子元素的 li 元素)

注意:eq(index)只匹配一個(gè)元素,而 :nth-child 將為每一個(gè)符合條件的父元素匹配子元素贵扰。同時(shí)應(yīng)該注意到 nth-child(index) 的 index 是從 1 開始的仇穗,而 :eq(index) 是從 0 開始的。同理 :first 和 :first-child戚绕,:last 和 :last-child 也類似纹坐。

表單對(duì)象屬性過濾選擇器

選擇器 描 述 返回 實(shí)例
:enabled 選取所有可用元素 集合元素 $("#form1:enabled")選取 id 為 form1 的表單內(nèi)所有可用元素
:disabled 選取所有不可用的元素 集合元素 $("#form1:disabled")選取 id 為 form1 的表單內(nèi)所有不可用元素
:checked 選取所有被選中的元素(單選、復(fù)選) 集合元素 $("input:checked")選取所有被選中的 input 元素
:selected 選取所有被選中的選項(xiàng)元素 集合元素 $("select option:selected") 選取所有被選中的選項(xiàng)元素

表單選擇器

選擇器 描 述 返回 實(shí)例
:input 選取 input舞丛、textarea耘子、select、button 元素 集合元素 $(":input")選取所有的 input球切、textarea谷誓、select、button 元素
:text 選取所有單行文本框 集合元素 $(":text")選取所有的單行文本框
:password 選取所有密碼框 集合元素 $(":password")選取所有的密碼框
:radio 選取所有單選框 集合元素 $(":radio")選取所有的單選框
:checkbox 選取所有多選框 集合元素 $(":checkbox")選取所有的多選框
:submit 選取所有提交按鈕 集合元素 $(":submit")選取所有的提交按鈕
:image 選取所有圖像按鈕 集合元素 $(":image")選取所有的圖像按鈕
:reset 選取所有重置按鈕 集合元素 $(":reset")選取所有的重置按鈕
:button 選取所有的按鈕 集合元素 $(":button")選取所有的按鈕
:file 選取所有的上傳域 集合元素 $(":file")選取所有的上傳域
:hidden 選取所有不可見得元素 集合元素 $(":hidden")選取所有的不可見得元素

注意$(":input")$("input")的區(qū)別


選擇器中的注意事項(xiàng)

選擇器中含有特殊符號(hào)的注意事項(xiàng)

  • 選擇器中含有"."吨凑、"#"捍歪、"("或"]"等特殊字符
    //W3C的規(guī)定户辱,屬性值中是不能含有這些特殊字符的
    <div id="id#d">aa</div>
    <div id="id[1]">bb</div>
    //正確獲取方式 轉(zhuǎn)義特殊字符
    $("#\\#b");
    $("#id\\[1\\]");
  • 屬性選擇器的@符號(hào)問題
    //1.1.0 版本遺留問題
    $("div[@title='test']")
    //1.3.1 版本
    $("div[title='test']")

選擇器中含有空格的注意事項(xiàng)

選擇器中的空格也是不容忽視的,多一個(gè)空格或少一個(gè)空格也許會(huì)得到截然不同的結(jié)果

    //結(jié)果會(huì)截然不同
    $(".test :hidden")
    $(".test:hidden")

其他選擇器

jQuery提供的選擇器的擴(kuò)展

  • MoreSelectors for jQuery
    • .color可以匹配顏色糙臼,
    • :colIndex可以匹配表格中的列
    • :focus可以匹配獲取焦點(diǎn)的元素
  • Basic XPath
    • 支持XPath選擇器
    • 降低選擇器匹配的效率

其他使用CSS選擇器的方法

  • document.getElementsBySelector()
  • cssQuery()
  • querySelectorAll()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末庐镐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子变逃,更是在濱河造成了極大的恐慌焚鹊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件韧献,死亡現(xiàn)場離奇詭異末患,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)锤窑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門璧针,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渊啰,你說我怎么就攤上這事探橱。” “怎么了绘证?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵隧膏,是天一觀的道長。 經(jīng)常有香客問我嚷那,道長胞枕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任魏宽,我火速辦了婚禮腐泻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘队询。我一直安慰自己派桩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布蚌斩。 她就那樣靜靜地躺著铆惑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪送膳。 梳的紋絲不亂的頭發(fā)上员魏,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音肠缨,去河邊找鬼逆趋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛晒奕,可吹牛的內(nèi)容都是我干的闻书。 我是一名探鬼主播名斟,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼魄眉!你這毒婦竟也來了砰盐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤坑律,失蹤者是張志新(化名)和其女友劉穎岩梳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晃择,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冀值,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宫屠。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片列疗。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浪蹂,靈堂內(nèi)的尸體忽然破棺而出抵栈,到底是詐尸還是另有隱情,我是刑警寧澤坤次,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布古劲,位于F島的核電站,受9級(jí)特大地震影響缰猴,放射性物質(zhì)發(fā)生泄漏产艾。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一洛波、第九天 我趴在偏房一處隱蔽的房頂上張望胰舆。 院中可真熱鬧,春花似錦蹬挤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至误续,卻和暖如春吨悍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹋嵌。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來泰國打工育瓜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栽烂。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓躏仇,卻偏偏與公主長得像恋脚,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子焰手,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 http://blog.poetries.top/2016/10/20/review-jQuery 關(guān)注...
    程序員poetry閱讀 16,641評(píng)論 18 503
  • 一糟描、樣式篇 第1章 初識(shí)jQuery (1)環(huán)境搭建 進(jìn)入官方網(wǎng)站獲取最新的版本 http://jquery.co...
    凜0_0閱讀 3,358評(píng)論 0 44
  • 第15章 CSS選擇引擎 {#15-css} 隨著web開發(fā)越來越專業(yè),所有流行的瀏覽器都包含了W3C選擇器API...
    九毫閱讀 613評(píng)論 0 1
  • A小姐從來沒有想過,“溫水煮青蛙才能真的把青蛙熬死”這句話會(huì)真的發(fā)生在自己身上躲履。 2015年的12月见间,她告別了咸濕...
    舒小餅閱讀 118評(píng)論 1 1
  • 首先我們來看看MVC架構(gòu)的示意圖: 和訪問者交互的是控制層(Controller層),控制器(controller...
    php紅薯閱讀 276評(píng)論 0 0