頁面的任何操做都須要節點的支撐,開發者如何快速高效的找到指定的節點也是前端開發中的一個重點。jQuery提供了一系列的選擇器幫助開發者達到這一目的,讓開發者能夠更少的處理複雜選擇過程與性能優化,更多專一業務邏輯的編寫。
jQuery幾乎支持主流的css1~css3選擇器的寫法,咱們從最簡單的也是最經常使用的開始學起
一、id選擇器:一個用來查找的ID,即元素的id屬性
$( "#id" )
id選擇器也是基本的選擇器,jQuery內部使用JavaScript函數document.getElementById()來處理ID的獲取。原生語法的支持老是很是高效的,因此在操做 DOM的獲取上,若是能採用id的話盡然考慮用這個選擇器
值得注意:
id是惟一的,每一個id值在一個頁面中只能使用一次。若是多個元素分配了相同的id,將只匹配該id選擇集合的第一個DOM元素。但這種行爲不該該發生;有超過一個元素的頁面使用相同的id是無效的
二、類選擇器,顧名思義,經過class樣式類名來獲取節點
描述:$( ".class" )
類選擇器,相對id選擇器來講,效率相對會低一點,可是優點就是能夠多選,一樣的jQuery在實現上,對於類選擇器,若是瀏覽器支持,jQuery使用JavaScript的原生getElementsByClassName()函數來實現的
咱們不難發現:
jQuery除了選擇上的簡單,並且沒有再次使用循環處理
不難想到$(".imooc").css()方法內部確定是帶了一個隱式的循環處理,因此使用jQuery選擇節點,不只僅只是選擇上的簡單,同時還增長不少關聯的便利操做,後續咱們還會慢慢的學到其餘的優點。
三、元素選擇器:根據給定(html)標記名稱選擇全部的元素
描述:$( "element" )
搜索指定元素標籤名的全部節點,這個是一個合集的操做。一樣的也有原生方法getElementsByTagName()函數支持
下例代碼所示:javascript
<body>
<div class="aaron">
<p>class="aaron"</p>
<p>選中</p>
</div>
<div class="aaron">
<p>class="aaron"</p>
<p>選中</p>
</div>
<div class="imooc">
<p>class="imooc"</p>
<p>jQuery選中</p>
</div>
<div class="imooc">
<p>class="imooc"</p>
<p>jQuery選中</p>
</div>
<script type="text/javascript">
//經過原生方法處理
//獲取到全部的節點標記名爲div的元素
//給每個div加上藍色的邊框
var divs = document.getElementsByTagName('div');
for (var i = 0; i < divs.length; i++) {
divs[i].style.border = "3px solid blue";
}
</script>
<script type="text/javascript">
//經過jQuery直接傳入標籤名p
//標籤是能夠多個的,因此獲得的一樣也是一個合集
$("p").css("border", "3px solid red");
</script>
</body>
第一組:經過getElementsByTagName方法獲得頁面全部的<div>元素
var divs = document.getElementsByTagName('div');
divs是dom合集對象,經過循環給每個合集中的<div>元素賦予新的boder樣式
第二組:一樣的效果,$("p")選取全部的<p>元素,經過css方法直接賦予樣式
四、全選擇器(*選擇器)css
在CSS中,常常會在第一行寫下這樣一段樣式html
* {padding: 0; margin: 0;}
通配符*意味着給全部的元素設置默認的邊距。jQuery中咱們也能夠經過傳遞*選擇器來選中文檔頁面中的元素前端
描述:$( "*" )java
拋開jQuery,若是要獲取文檔中全部的元素,經過document.getElementsByTagName()中傳遞"*"一樣能夠獲取到css3
不難發現,id、class、tag均可以經過原生的方法獲取到對應的節點,可是咱們還須要考慮一個兼容性的問題,我這裏順便說起一下,好比:web
五、層級選擇器瀏覽器
文檔中的全部的節點之間都是有這樣或者那樣的關係。咱們能夠把節點之間的關係能夠用傳統的家族關係來描述,能夠把文檔樹看成一個家譜,那麼節點與節點直接就會存在父子,兄弟,祖孫的關係了。性能優化
選擇器中的層級選擇器就是用來處理這種關係:子元素、後代元素、兄弟元素、相鄰元素app
經過一個列表,對比層級選擇器的區別
仔細觀察層級選擇器之間仍是有不少類似與不一樣點
六、基本篩選選擇器
七、內容篩選選擇器元素有顯示狀態與隱藏狀態,jQuery根據元素的狀態擴展了可見性篩選選擇器:visible與:hidden
描述以下:
這2個選擇器都是 jQuery 延伸出來的,看起來比較簡單,可是元素可見性依賴於適用的樣式
:hidden選擇器,不只僅包含樣式是display="none"的元素,還包括隱藏表單、visibility等等
咱們有幾種方式能夠隱藏一個元素:
若是元素中佔據文檔中必定的空間,元素被認爲是可見的。 可見元素的寬度或高度,是大於零。 元素的visibility: hidden 或 opacity: 0被認爲是可見的,由於他們仍然佔用空間佈局。
瀏覽器支持:
CSS選擇器不管CSS2.1版本仍是CSS3版本,IE7和IE8都支持,webkit、Gecko核心及Opera也都支持,只有IE6如下瀏覽器纔不支持
在這麼多屬性選擇器中[attr="value"]和[attr*="value"]是最實用的
[attr="value"]能幫咱們定位不一樣類型的元素,特別是表單form元素的操做,好比說input[type="text"],input[type="checkbox"]等 [attr*="value"]能在網站中幫助咱們匹配不一樣類型的文件
子元素篩選選擇器不常使用,其篩選規則比起其它的選擇器稍微要複雜點
子元素篩選選擇器描述表:
注意事項: