以下皆為舉例說(shuō)明
ID選擇器 :$("#id");
類(lèi)名選擇器 : $(".class");
標(biāo)簽選擇器 : $("ele");
群組選擇器 : $("#id , .class , ele");
后代選擇器 : $("ul li a");
等價(jià)方法 : $("#ID").find("ele");
通配符選擇器 : $("*"); // 一般用在局部環(huán)境中
比如 : $("ul li *"); 選擇到ul里的li的所有標(biāo)簽
選擇器靈活使用束莫,可以使得選擇元素更加精準(zhǔn)和快速唤锉;
還有一種選擇器冬骚,可以在ID和類(lèi)中指明元素前綴椅贱,比如
$("div.box") // 獲取類(lèi)名為box的div
類(lèi)有一個(gè)特殊的模式懂算,就是同一DOM多個(gè)類(lèi)名,對(duì)于這種模式庇麦,我們有多個(gè)類(lèi)可以使用计技,但要注意和群組選擇器之間的區(qū)別
$(".box.pic") // 獲取類(lèi)名既有box又有pic的元素
警告:在構(gòu)造選擇器時(shí),有一個(gè)通用的優(yōu)化原則:只追求必要的確定性山橄。當(dāng)選擇器篩選越復(fù)雜垮媒,jQuery內(nèi)部的選擇器引擎處理字符串的時(shí)間就越長(zhǎng)。
子選擇器 : $("#ID > ele") ;
等價(jià)方法 : $("#ID").children("ele");
next選擇器 : $("div + p") //只獲取某一個(gè)節(jié)點(diǎn)的后一個(gè)同級(jí)DOM對(duì)象
等價(jià)方法 : $("div").next("p")
prev選擇器 :$("div").prev("p") // 獲取同級(jí)的上一個(gè)節(jié)點(diǎn)
等價(jià)方法 : $("div").prevAll("p") // 獲取同級(jí)上面所有的節(jié)點(diǎn)
siblings選擇器 : $("div").siblings("p") // 獲取同級(jí)上下所有的節(jié)點(diǎn)
nextAll選擇器 : $("div~p") // 獲取某節(jié)點(diǎn)后面所有的同級(jí)節(jié)點(diǎn)
等價(jià)方法 :$("div').nextAll("p")
如果 等價(jià)方法里不書(shū)寫(xiě)任何內(nèi)容航棱,其實(shí)睡雇,就相當(dāng)于里面書(shū)寫(xiě)了*號(hào),通常情況下饮醇,不建議這樣使用它抱,對(duì)性能有一定的影響且精準(zhǔn)度不佳
比如
$("div").next(); // next方法里沒(méi)有限定節(jié)點(diǎn),所以朴艰,無(wú)論與div同級(jí)的下一個(gè)節(jié)點(diǎn)是什么观蓄,都會(huì)被選中,而如果限定為p節(jié)點(diǎn)祠墅,那么假如侮穿,div的下一個(gè)同級(jí)節(jié)點(diǎn)不是p,那么將不會(huì)被選中
那么這么多選擇器毁嗦,在實(shí)際工作中亲茅,我們究竟應(yīng)該如何選擇呢?
其實(shí)金矛,無(wú)論從性能芯急,還是語(yǔ)義化及jQuery本身來(lái)考慮,我們都應(yīng)該選擇jQuery提供的方法驶俊,畢竟css的模式過(guò)于死板娶耍,所以,如果jQuery提供了獨(dú)立的方法來(lái)代替某些選擇器的功能饼酿,我們建議優(yōu)先使用此類(lèi)方法榕酒。
屬性選擇器
$("a[title]") // 標(biāo)簽為a,且具有title屬性的節(jié)點(diǎn)
$("a[title = num]") // 標(biāo)簽為a故俐,且具有title屬性且屬性值為num的節(jié)點(diǎn)
$("a[title != num]") // 標(biāo)簽為a想鹰,且具有title屬性且屬性值不為num的節(jié)點(diǎn)
過(guò)濾選擇器
$("li:first") // 獲取第一個(gè)li
$("li:last") // 獲取最后一個(gè)li
$("li:not(.red)") // 獲取li 里類(lèi)名不是red的所有節(jié)點(diǎn)
$("li:even") // 獲取偶數(shù)li,索引號(hào)從0開(kāi)始
$("li:odd") // 獲取奇數(shù)li药版,索引號(hào)從0開(kāi)始
$("li:eq(3)") // 獲取li里的第四個(gè)辑舷,索引號(hào)從0開(kāi)始,所以是3+1槽片; 值可以為負(fù)何缓,即從尾部開(kāi)始計(jì)算
$("li:gt(2)") // 獲取索引號(hào)大于2的所有元素肢础,索引號(hào)從0開(kāi)始
$("li:lt(2)") // 獲取索引號(hào)小于2的所有元素,索引號(hào)從0開(kāi)始
$("focus") // 選擇當(dāng)前焦點(diǎn)閃爍的元素 注意碌廓,是網(wǎng)頁(yè)初始狀態(tài)就已經(jīng)激活的焦點(diǎn)传轰,并不是事件觸發(fā)的,所以需做以下處理
$(":focus").get(0).focus();
jQuery為最常規(guī)的過(guò)濾選擇器提供了專(zhuān)用的方法谷婆,用來(lái)提高性能和效率
$("li").first(); // 在使用first() , last()方法時(shí)慨蛙,為了避免相同元素造成的影響,應(yīng)指明其父元素
$("li").last();
$("li").not();
$("li").eq(2);
內(nèi)容過(guò)濾器
$("div:contains('baidu.com')") // 選取含有"baidu.com"文本的元素
$("div:empty") // 選取不包含子元素或空文本的元素
$(":has(.red)") // 選取子元素含有class是red的元素
比如 : $("ul:has('.red')") // 選擇的就是整個(gè)ul 纪挎, 而不是含有red類(lèi)名的li
等價(jià)方法 : $("ul").has(".red")
$(":parent") // 選取含有子元素或文本的元素
$("li").parent() // 選取當(dāng)前元素的父節(jié)點(diǎn)
$("li").parentUntil("body") // 選取當(dāng)前元素的父節(jié)點(diǎn)遇到body節(jié)點(diǎn)停止
可見(jiàn)性過(guò)濾器
$(":hidden") // 選取所有不可見(jiàn)元素
$(":visible") // 選取所有可見(jiàn)元素
子元素過(guò)濾器
$("li:first-child") // 獲取每個(gè)父元素的第一個(gè)子元素
$("li:last-child") // 獲取每個(gè)父元素的最后一個(gè)子元素
$("li:only-child") // 獲取只有一個(gè)子元素的元素
// 下面三個(gè)選擇器期贫,索引值皆為從1開(kāi)始
$("li:nth-child(even)") // 獲取每個(gè)父元素的偶數(shù)li元素
$("li:nth-child(odd)") // 獲取每個(gè)父元素的奇數(shù)li元素
$("li:nth-child(2)") // 獲取每個(gè)父元素的第2個(gè)li元素
其他方法
$(".red").is("li")
$("li").slice(0,2) // 前三個(gè)元素被選中
$("li").slice(2,4) // 3,4被選中
$("li").slice(0,-2) // 從后向前數(shù),倒數(shù)第一個(gè)和倒數(shù)第二個(gè)不選异袄,其他全選
$("li").slice(2,-2) // 前兩個(gè)不選唯灵,后兩個(gè)不選,其他全選
$("div").contents() // 返回子節(jié)點(diǎn)數(shù)量(包含文本節(jié)點(diǎn))
$("li").filter(".red , :first-child , :last-child") // 可靈活組合選擇器
// 可實(shí)現(xiàn)精確查找
$(function () {
$("li").filter(function () {
return $(this).attr("class") == "red" && $(this).attr("title") == "列表3";
}).css("background", "#ccc");
})
本文只是列出一些較為常用的選擇器隙轻,并不是說(shuō)jQuery只有這些選擇器,具體請(qǐng)參考jQuery官方網(wǎng)站 http://jquery.com/