這里接著上一個Item1 把jQuery的選擇器講完。主要有:屬性過濾器和子元素過濾器
**點擊”名稱”會跳轉到此方法的jQuery官方說明文檔.**
### 5. 屬性過濾器 Attribute Filters
<table border="1" cellspacing="1" cellpadding="5"><tbody><tr><td width="238" valign="top">名稱</td><td width="222" valign="top">說明</td><td width="312" valign="top">舉例</td></tr><tr><td width="242" valign="top"><a href="http://docs.jquery.com/Selectors/attributeHas#attribute">[attribute]</a></td><td width="220" valign="top">匹配包含給定屬性的元素</td><td width="312" valign="top">查找所有含有 id 屬性的 div 元素: <br/>$(“div[id]”)</td></tr><tr><td width="245" valign="top"><a href="http://docs.jquery.com/Selectors/attributeEquals#attributevalue">[attribute=value]</a></td><td width="219" valign="top">匹配給定的屬性是某個特定值的元素</td><td width="312" valign="top">查找所有 name 屬性是 newsletter 的 input 元素: <br/>$(“input[name=’newsletter’]”).attr(“checked”, true);</td></tr><tr><td width="246" valign="top"><a href="http://docs.jquery.com/Selectors/attributeNotEqual#attributevalue">[attribute!=value]</a></td><td width="218" valign="top">匹配給定的屬性是不包含某個特定值的元素</td><td width="311" valign="top">查找所有 name 屬性不是 newsletter 的 input 元素: <br/>$(“input[name!=’newsletter’]”).attr(“checked”, true);</td></tr><tr><td width="248" valign="top"><a href="http://docs.jquery.com/Selectors/attributeStartsWith#attributevalue">[attribute^=value]</a></td><td width="217" valign="top">匹配給定的屬性是以某些值開始的元素</td><td width="311" valign="top">$(“input[name^=’news’]”)</td></tr><tr><td width="249" valign="top"><a href="http://docs.jquery.com/Selectors/attributeEndsWith#attributevalue">[attribute$=value]</a></td><td width="217" valign="top">匹配給定的屬性是以某些值結尾的元素</td><td width="311" valign="top">查找所有 name 以 ‘letter’ 結尾的 input 元素: <br/>$ (“input[name =’letter’]”)</td></tr><tr><td width="249" valign="top"><a href="http://docs.jquery.com/Selectors/attributeContains#attributevalue">[attribute*=value]</a></td><td width="217" valign="top"><p>匹配給定的屬性是以包含某些值的元素</p></td><td width="311" valign="top"><p>查找所有 name 包含 ‘man’ 的 input 元素: <br/>$ (“input[name * =’man’]”)</p></td></tr><tr><td width="249" valign="top"><a href="http://docs.jquery.com/Selectors/attributeMultiple#attributeFilter1attributeFilter2attributeFilterN">[attributeFilter1][attributeFilter2][attributeFilterN]</a></td><td width="217" valign="top">復合屬性選擇器,需要同時滿足多個條件時使用。</td><td width="313" valign="top">找到所有含有 id 屬性,并且它的 name 屬性是以 man 結尾的: <br/> $ (“input[id][name =’man’]”)</td></tr></tbody></table>
~~~
<input type=”text” name=”username” value=”zhangsan” />
~~~
- $ (“[name]”) —— 找到有name屬性的元素
- $(“[value=tom]”) —— 找到有value屬性的元素,并且value的值等于tom
- $(“[value^=to]”) —— 找到有value屬性的元素,并且value的值是以to開始
- $(“[value$=ab]”) —— 找到有value屬性的元素,并且value的值是以ab結尾
- $(“[value*=ab]”) —— 找到有value屬性的元素,并且value的值里邊包含ab信息
-
$(“[value!=ab]”)
①找到有value屬性的元素,并且value的值不等于ab
②或者是沒有value屬性元素
~~~
<input value=”123”><input value=”ab”>
~~~
- $([name][class=^a][value!=123] ) —— 符合選擇器,多個條件同時滿足(并且,交集)
~~~
<script>
function f1(){
//$("[class]").css('color','red');//有class屬性
//$("[id=hello]").css("color","blue");//id=hello的元素
//$("[class^=app]").css("color",'blue');//class內容以app開始
//$("[class$=e]").css("color","red"); //class內容以e結尾
//$("[class*=p]").css("color","red"); //class內容包含p
//class內容不為app123 或 沒有class屬性的
//$("[class!=app123]").css("color","blue");
//有id屬性和class屬性并且class不等于app123
//$("[id][class!=app123][class]").css("color",'blue');
//獲得input元素,并且有class屬性,內容以app開始
$("[class=app123]input").css("color",'blue');
//$("input:eq(2)").css("color",'blue');
}
</script>
<body>
<div class="apple">apple</div>
<div class="app123">banana</div>
<input type="text" value="tom" id="hello" class="peare"><br />
<input type="text" value="jack" class="app123"><br />
<input type="text" value="linken" class="apple"><br />
<input type="button" value="觸發" onclick="f1()">
<p>I am bread</p>
</body>
~~~
### 6. 子元素過濾器 Child Filters
<table border="1" cellspacing="1" cellpadding="5"><tbody><tr><td width="256" valign="top">名稱</td><td width="223" valign="top">說明</td><td width="290" valign="top">舉例</td></tr><tr><td width="266" valign="top"><a href="http://docs.jquery.com/Selectors/nthChild#index">:nth-child(index/even/odd/equation)</a></td><td width="219" valign="top"><p>匹配其父元素下的第N個子或奇偶元素</p><p>‘:eq(index)’ 只匹配一個元素,而這個將為每一個父元素匹配子元素。:nth-child從1開始的,而:eq()是從0算起的! </p><p>可以使用: <br/>nth-child(even) <br/>:nth-child(odd) <br/>:nth-child(3n) <br/>:nth-child(2) <br/>:nth-child(3n+1) <br/>:nth-child(3n+2)</p></td><td width="284" valign="top">在每個 ul 查找第 2 個li: <br/>$(“ul li:nth-child(2)”)</td></tr><tr><td width="276" valign="top"><a href="http://docs.jquery.com/Selectors/firstChild">:first-child</a></td><td width="216" valign="top"><p>匹配第一個子元素</p><p>‘:first’ 只匹配一個元素,而此選擇符將為每個父元素匹配一個子元素</p></td><td width="279" valign="top">在每個 ul 中查找第一個 li: <br/>$(“ul li:first-child”)</td></tr><tr><td width="284" valign="top"><a href="http://docs.jquery.com/Selectors/lastChild">:last-child</a></td><td width="214" valign="top"><p>匹配最后一個子元素</p><p>‘:last’只匹配一個元素,而此選擇符將為每個父元素匹配一個子元素</p></td><td width="275" valign="top">在每個 ul 中查找最后一個 li: <br/>$(“ul li:last-child”)</td></tr><tr><td width="290" valign="top"><a href="http://docs.jquery.com/Selectors/onlyChild">:only-child</a></td><td width="212" valign="top"><p>如果某個元素是父元素中唯一的子元素,那將會被匹配</p><p>如果父元素中含有其他元素,那將不會被匹配。</p></td><td width="277" valign="top">在 ul 中查找是唯一子元素的 li: <br/>$(“ul li:only-child”)</td></tr></tbody></table>
**1 :nth-child(index/even/odd)**
匹配其父元素下的第N個子或奇偶元素
‘:eq(index)’ 只匹配一個元素,
而這個將為每一個父元素匹配子元素。
:nth-child從1開始的,而:eq()是從0算起的!
**2 :first-child**
匹配其父元素下的第一個子元素
**3 :last-child**
匹配其父元素下的最后一個子元素
**4 :only-child**
如果某個元素是父元素中唯一的子元素,那將會被匹配
容易與“簡單過濾選擇器”混淆
:first :eq() :last
~~~
<script>
function f1(){
//把全部的li匯合到一起找到第一個
$("li:first").css("color","red"); //一個結果
//first-child匹配其父元素下的第一個子元素
$("li:first-child").css("color","blue"); //兩個結果
$("li:last-child").css("color","red");//兩個結果
$("li:nth-child(2)").css("background-color","lightblue"); //兩個結果
$("li:nth-child(even)").css("background-color","lightblue");
$("li:nth-child(odd)").css("background-color","lightblue");
//找到其父元素只有一個子元素的元素
$("li:only-child").css('color','red');
}
</script>
<body>
<ul>
<li>四</li>
<li>大</li>
<li>家</li>
<li>族</li>
</ul>
<ul>
<li>喬</li>
<li>家</li>
<li>大</li>
<li>院</li>
</ul>
<ul>
<li>老大</li>
</ul>
<input type="button" value="觸發" onclick="f1()">
</body>
~~~
**子元素選擇器 和 簡單過濾選擇器使用 區別:**
1.
簡單過濾選擇器使用
- a) 把全部元素放到一起統一使用
- b) 下標從0開始計算
2.子元素選擇器
- a) 每個元素的父元素看成獨立的單位進行運算
- b) 下標從1開始計算