深入學習jQuery選擇器系列第一篇——基礎選擇器和層級選擇器


前面的話

  選擇器是jQuery的根基,在jQuery中,對事件處理、遍歷DOM以及ajax操作都依賴於選擇器。jQuery選擇器完全繼承了CSS的風格,兩者的寫法十分相似,只不過兩者的作用效果不同。CSS選擇器找到元素后添加樣式,而jQuery選擇器找到元素后添加行為。jQuery選擇器可以分為基礎選擇器、層級選擇器、過濾選擇器和表單選擇器四類。對於每類選擇器,除了給出jQuery選擇器的寫法,也會給出相應的CSS選擇器和DOM選擇器的寫法。有所比較,才能理解得更深。本文是jQuery選擇器系列第一篇——基礎選擇器和層級選擇器

 

基礎選擇器

  基礎選擇器是jQuery中最常用選擇器,也是最簡單的選擇器,它通過元素id、class和標簽名等來查找DOM元素

id選擇器

  id選擇器$('#id')通過給定的id匹配一個元素,返回單個元素

<div id="test">測試元素</div>
<script>
//選擇id為test的元素並設置其字體顏色為紅色
$('#test').css('color','red');
</script>

  對應CSS的id選擇器

#test{color:red}

  對應DOM的getElementById()方法,而jQuery內部也使用該方法來處理ID的獲取

document.getElementById('test').style.color = 'red';

 

元素選擇器

  元素選擇器$('element')根據給定的元素名匹配元素,並返回符合條件的集合元素

<div>1</div>
<div>2</div>
<script>
//選擇標簽名為div的元素並設置其字體顏色為紅色
$('div').css('color','red');
</script>

  對應CSS的元素選擇器

div{color:red}

  對應DOM的getElementsByTagName()方法,而jQuery內部也使用該方法來處理元素名的獲取

Array.prototype.forEach.call(document.getElementsByTagName('div'),function(item,index,arr){
    item.style.color = 'red';
});

 

類選擇器

  類選擇器$('.class')根據給定的類名匹配元素,並返回符合條件的集合元素

<div class="test">1</div>
<div class="test">2</div>
<script>
//選擇class為test的元素並設置其字體顏色為紅色
$('.test').css('color','red');
</script>

  對應CSS的類選擇器

.test{color:red}

  對應DOM的getElementsByClassName()方法,而jQuery內部也使用該方法來處理類名的獲取

Array.prototype.forEach.call(document.getElementsByClassName('test'),function(item,index,arr){
    item.style.color = 'red';
});

 

通配選擇器

  通配選擇器$('*')匹配文檔中所有的元素,並返回集合元素

$('*').css('margin','0');

  對應CSS的通配選擇器

* {margin:0}

  對應DOM的document.all集合

Array.prototype.forEach.call(document.all,function(item,index,arr){
    item.style.margin = 0;
});

  或者參數為通配符*的getElementsByTagName()方法

Array.prototype.forEach.call(document.getElementsByTagName('*'),function(item,index,arr){
    item.style.margin = 0;
});

 

群組選擇器

  群組選擇器$('selector1,selector2,...')將每一個選擇器匹配到的元素合並后一起,並返回集合元素

<div class="a">1</div>
<span id="b">2</span>
<a href="#">3</a>
<script>
//選擇符合條件的元素並設置其字體顏色為紅色
$('.a,#b,a').css('color','red');
</script>

  對應CSS的群組選擇器

.a,#b,a{color:red}

  對應DOM的querySelectorAll()選擇器

Array.prototype.forEach.call(document.querySelectorAll('.a,#b,a'),function(item,index,arr){
    item.style.color = 'red';
});

 

層級選擇器

  如果想通過DOM元素之間的層級關系來獲取特定元素,層級選擇器是一個非常好的選擇。層級共包括后代元素、子元素、相鄰元素和同級元素四種

后代選擇器

  后代選擇器$('ancestor descendant')選擇給定的祖先元素的所有后代元素,並返回集合元素

<div id="test">
    <div>
        <div>1</div>
        <div>2</div>
    </div>
</div>
<script>
$('#test div').css('margin','10px');
console.log($('#test div').length);//3
</script>

  對應CSS的后代選擇器

#test div{margin: 10px}

  對應DOM的getElement類方法

Array.prototype.forEach.call(document.getElementById('test').getElementsByTagName('div'),function(item,index,arr){
    item.style.margin = '10px';
});

  或者使用querySelectorAll()方法

Array.prototype.forEach.call(document.querySelectorAll('#test div'),function(item,index,arr){
    item.style.margin = '10px';
});

子元素選擇器

  子元素選擇器$('parent > child')選擇所有指定'parent'元素中指定的'child'的直接子元素,並返回集合元素

<div id="test">
    <div>
        <div>1</div>
        <div>2</div>
    </div>
</div>
<script>
$('#test > div').css('margin','10px');
console.log($('#test > div').length);//1
</script>

  對應CSS的子元素選擇器

#test > div{margin: 10px}

  對應DOM的querySelectorAll()方法

Array.prototype.forEach.call(document.querySelectorAll('#test > div'),function(item,index,arr){
    item.style.margin = '10px';
});

 

一般兄弟選擇器

  一般兄弟選擇器$('prev ~ siblings')選擇'prev'元素之后的所有同級的'siblings'元素,並返回集合元素

<ul>
    <li id="test">1</li>
    <li>2</li>
    <li>3</li>
</ul>
<script>
$('#test ~ li').css('color','red');
console.log($('#test ~ li').length);//2
</script>

  對應CSS的一般兄弟選擇器

#test ~ li{color:red;}

  對應DOM的querySelectorAll()方法

Array.prototype.forEach.call(document.querySelectorAll('#test ~ li'),function(item,index,arr){
    item.style.color = 'red';
});

相鄰兄弟選擇器

  相鄰兄弟選擇器$('prev + next')選擇所有緊跟在'prev'元素后的'next'元素,並返回集合元素

<ul>
    <li id="test">1</li>
    <li>2</li>
    <li>3</li>
</ul>
<script>
$('#test + li').css('color','red');
console.log($('#test + li').length);//1
</script>

  對應CSS的相鄰兄弟選擇器

#test + li{color:red;}

  對應DOM的querySelectorAll()方法

Array.prototype.forEach.call(document.querySelectorAll('#test + li'),function(item,index,arr){
    item.style.color = 'red';
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM