WEB前端 -- 屬性選擇器與層次選擇器
阿新 • • 發佈:2018-12-25
1.層次選擇器
選擇器 | CSS模式 | JQuery模式 | 描述 |
後代選擇器 | ul li a{} | $('ul li a') | 獲取追溯到的多個DOM物件 |
子選擇器 | div > p{} | $('div p') | 只獲取子類節點的多個DOM物件 |
next選擇器 | div + p{} | $('div + p') | 只獲取某個節點後一個同級DOM物件 |
nextAll選擇器 | div ~p{} | $('div ~ p') | 獲取某節點後面所有同級DOM物件 |
在層次選擇器中,除後代選擇器外,其他三種高階選擇器不支援IE6,而JQuery相容IE6。
next相鄰的後一個(即緊跟其後的第一個元素),nextAll是後N個//後代選擇器 $('#box p').css('color','red');//全相容 //JQuery為後代選擇器提供一個等價find()方法 $('#box').find('p').css('color','red');//與後代選擇器等價 //子選擇器 #box > p{ //IE6不支援 color:red; } $('#box>p').css('color','red');//相容IE6 //JQuery為子選擇器提供了一個等價的children()方法 $('#box').children().css('color','red');//與子選擇器等價
//nextAll選擇器(後面所有同級節點)
#box~p{ //IE6不支援
color:red;
}
$('#box~p').css('color','red'); //相容IE6
//JQuery為nextAll選擇器提供了一個等價的方法 :nextAll();
$('#box').nextAll('p').css('color','red'); //與nextAll()選擇器等價
層次選擇器對節點的層次都是有要求的,比如子選擇器,只有子節點才可以唄選擇到,孫子節點和重孫子節點都無法選擇到。next和nextAll選擇器,必須是同一個層次的後一個和後N個,不在同一個層次就無法選取到了。
理論上,JQuery提供的方法:find()、next()、nextAll()和children()執行速度要快於使用高階選擇器。因為他們實現的演算法有一定的差異,高階選擇器是通過“Sizzle引擎”解析字串來獲取節點物件,而JQuery提供的方法則是通過querySelectorAll()操作直接得到的(IE6/7不支援)。但這種快慢的差異,對於客戶端指令碼來說沒有太大的實用性,並且速度的差異還要取決於瀏覽器和選擇的元素內容。
在find()、next()、nextAll()和children()這4種方法中,若不傳引數,就相當於傳遞了“*”,即任何節點,不建議這樣做。因為這樣做不但影響效能,而且由於精準度不佳,可能在複雜的HTML結構時產生怪異的結果。
$('#box').next();//相當於$('#box').next('*');
2.屬性選擇器
CSS模式 | JQuery模式 | 描述 |
a[title] | $('a[title]') | 獲取具有這個屬性的DOM物件 |
a[title=num1] | $('a[title=num1]') | 獲取具有title屬性且屬性值為num1的DOM物件 |
a[title^=num] | $('a[title^=num]') | 獲取具有title屬性且開頭屬性值匹配的DOM物件 |
a[title|=num] | $('a[title|=num]') | 獲取具有title屬性且等於屬性值或開頭屬性值匹配後面跟一個“-”號的DOM物件 |
a[title$=num] | $('a[title$=num]') | 獲取具有title屬性且結尾屬性值匹配的DOM物件 |
a[title!=num] | $('a[title!=num]') | 獲取具有title屬性且不等於屬性值的DOM物件 |
a[title~=num] | $('a[title~=num]') | 獲取具有title屬性且屬性值是以一個空格分割的列表,其中包含屬性之的DOM物件 |
a[title*=num] | $('a[title*=num]') | 獲取具有title屬性且屬性值含有一個指定字串的DOM物件 |
a[bbb][title=num1] | $('a[bbb][title=num1]') | 獲取具有title屬性且屬性值匹配的DOM物件 |