第二章(jQuery选择器)
2.1jQuery選擇器是什么
1.CSS選擇器
?
| 選擇器 | 示例 | 選擇器 | 示例 |
| 標簽選擇器 | a{ } p{ } ul{ } | ID選擇器 | #ID{ } |
| 類選擇器 | .class{ } | 群組選擇器 | td,p,div,a{ } |
| 后代選擇器 | #link a{ } | 通配符選擇器 | *{ } |
?
2.jQuery選擇器
*jQuery的行為規則都必須再獲取到元素后才能生效
例:
<script type=”text/javascript”>function demo(){Alert(‘JavaScript demo’) } </script> <p onclick = “demo();”>點擊我.</p>?
上述代碼為元素設置onclick事件,但是JS和HTML混雜在一起不妥,應該將內容和行為分離:?
<p class= “demo”>jQuery Demo</p> <script type=”text/javascript”>$(“.demo”).click(function(){ //給class 為demo的元素添加行為 Alert(“JQuery demo”); }) </script>?
2.2jQuery選擇器的優勢
①簡潔的寫法
②支持css1到css3選擇器
③完善的處理機制
使用jQuery選擇器不僅比使用傳統的getElementById()函數簡潔的多,而且能夠避免某些錯誤
例:
<div>test</div><script type=”text/javascript”>document.getElementById(“tt”).styel.color = “red”;</script>運行上述代碼會報錯,原因是沒有id為”tt”的元素
改進:
<div>test</div><script type=”text/javascript”> If(document.getElementById(“tt”)){ //判斷id為tt是否存在 document.getElementById(“tt”).styel.color = “red”;}</script>效果達到了,卻很復雜。使用jQuery則可以避免
<div>test</div><script type=”text/javascript”> $(“#tt”).css(“color”,”red”); //這里無需判斷id為tt是否存在</script>*$(“#tt”)獲取的永遠是對象, 即使網頁上沒有此元素。因此當用jQuery檢查某個元素再網頁上是否存在時,不能用以下代碼:
If($(“#tt”)){//do something }而應該根據獲取到元素的長度來判斷:
if($(“#tt”).length >0 ){//do something }或者轉化成DOM對象判斷:
if($(“#tt”)[0] ){//do something }?
2.3jQuery選擇器
①用js添加行為:(jQuery方法見2.4應用jQuery改寫示例)
示例1:給每個p元素添加行為
步驟:1獲取所有元素?
?? 2對元素進行循環(因為獲取的是數組對象)
?? 3給每個元素添加行為
var items = document.getElementsByTagName(“p”); //獲取網頁中所有P元素for(var i=0;i<items.length;i++){items[i].onclick = function(){//doing something }}?
示例2:使一個特定的表格隔行變色
步驟:1根據表格id獲取表格
??????? 2在表格內獲取<tbody>元素
????? ? 3在<tbody>元素下獲取<tr>元素
????? ? 4循環輸出獲取的<tr>元素
??????? 5對<tr>元素的索引值除以2取模,然后根據奇偶設置不同背景色
???????
<script type="text/javascript">window.onload = function(){var item = document.getElementById("tb"); var tbody = item.getElementsByTagName("tbody")[0]; //獲取表格的第1個tbody元素var trs = tbody.getElementsByTagName("tr");for(var i = 0 ;i<trs.length;i++){if(i%2==0){trs[i].style.backgroundColor = "#888";}}}</script></head><body><table id="tb"><tbody><tr><td>第一行</td><td>第一行</td></tr><tr><td>第二行</td><td>第二行</td></tr><tr><td>第三行</td><td>第三行</td></tr><tr><td>第四行</td><td>第四行</td></tr><tr><td>第五行</td><td>第五行</td></tr><tr><td>第六行</td><td>第六行</td></tr></tbody></table></body>?
效果如圖
示例3:對多選框進行操作,輸出選中的多選框個數
步驟:? 1新建數組
???????? ? 2獲取所有name為”check”的多選框
???????? ? 3循環判斷多選框是否被選中,如果被選中則添加到數組里
???????? ? 4獲取輸出按鈕,然后為按鈕添加onclick事件,輸出數組的長度
<body><input type="checkbox" value="1" name="check" checked/><input type="checkbox" value="2" name="check" ><input type="checkbox" value="3" name="check" checked/> <!--checked 被選中狀態--><input type="button" value="你選中的個數" id="btn"><script type="text/javascript">var btn = document.getElementById("btn");btn.onclick = function(){ //給btn按鈕添加事件var arrays = new Array();var items = document.getElementsByName("check");for(var i = 0;i<items.length;i++){if(items[i].checked){arrays.push(items[i].value);}}alert("選中的個數為:"+arrays.length)}</script></body>?
?
2.3.1基本選擇器
| 選擇器 | 描述 | 返回 | 示例 |
| #id | 根據id匹配 | 單元素 | $(“#id”) |
| .class | 根據類名匹配 | 集合 | $(“.class”) |
| element | 根據原色名匹配 | 集合 | $(“element”) |
| * | 匹配所有 | 集合 | $(“*”) |
| Selector1,selector2…. | 將每個選擇器匹配到元素合并后一起返回 | 集合 | $(“div,span,p.myClass”)選取所有div,span和clss為myClass的p標簽的一組元素 |
?
2.3.2層次選擇器(后代,子元素,相鄰,兄弟元素等)
| 選擇器 | 描述 | 返回 | 示例 |
| $(“p span”) | P元素里所有span元素 | 集合元素 | $(“div span”)選取div里所有的span元素 |
| $(“parent>child”) | 選取parent下的子元素 | 集合元素 | $(“div > span”)選取div下元素名為span的子元素 |
| $(“prev + next”) | 選取緊接prev元素后的next元素 | 集合元素 | $(“.one+div”)選取class為one的下一個div元素 |
| $(“prev ~ siblings”) | 選取prev元素之后所有siblings元素 | 集合元素 | $(“#two ~div”)選取id為two的元素后面所有div兄弟元素 |
?
*$(“prev + next”)和$(“prev ~ siblings”)用的比較少,有更簡單的方法代替
$(“prev + next”)與next()方法的等價關系
| ? | 選擇器 | 方法 |
| 等價關系 | $(“.one + div”) | $(“.one”).next(“div”) |
?
$(“prev ~ siblings”)和nextAll()方法的等價關系
| ? | 選擇器 | 方法 |
| 等價關系 | $(“#prev~div”) | $(“#prev”).nextAll(“div”) |
?
*$(“#prev~div”)選擇器只能選擇“#prev”元素后面同輩<div>元素,而siblings()方法與位置無關
$(“#prev ~ div”).css(“”,””);?? //選取#prev之后的同輩div元素
$(“#prev”).nextAll(“div”).css(“”,””)?? //同上
$(“#prev”).siblings(“div”).css(“”,””)?? //選取#prev所有的同輩div元素,無論前后位置
?
2.3.3過濾選擇器
過濾選擇器類似于偽類選擇器 以:開頭。分為:基本過濾,內容過濾,可見性過濾,屬性過濾,子元素過濾和表單對象屬性過濾選擇器
?
①基本過濾選擇器
| 選擇器 | 描述 | 返回 | 示例 |
| :first | 獲取第一個元素 | 單個元素 | $(“div:first”)獲取div中第一個div |
| :last | 獲取最后一個元素 | 單個元素 | $(“div:last”)獲取div中最后一個div |
| :not(selector) | 去除所有與給定選擇器匹配的元素 | 集合元素 | $(“input:not(:myClass)”)選取class不是myClass的input元素 |
| :even | 選取索引是偶數的所有元素,索引從0開始 | 集合元素 | $(“input:event”)選取索引是偶數的input元素 |
| :odd | 奇數 | ? | ? |
| :eq(index) | 選取索引等于index的元素(index從0開始) | 單個元素 | $(“input:eq(1)”)選取索引等于1的input元素 |
| :gt(index) | 選取索引大于index的元素 | 集合元素 | $(“input:gt(1)”)選取索引大于1的input元素(*大于1,不包括1) |
| :lt(index) | 選取索引小于index的元素 | 集合元素 | 與:gt()相反 |
| :header | 選取所有標題元素 | 集合元素 | $(“:header”)選取網頁中所有標題 |
| :animated | 選取當前正在執行動畫的所有元素 | 集合元素 | $(“div:animated”)選取正照執行動畫的div元素 |
?
②內容過濾器
| 選擇器 | 描述 | 返回 | 示例 |
| :contains(text) | 選取含有文本內容為”text”的元素 | 集合元素 | $(“div:contains(“我”)”) 選取含有”我”的div元素 |
| :empty | 選取不包含子元素或文本的空元素 | 集合元素 | $(“div:empty”)選取不包含子元素(包括文本元素)的div元素 |
| :has(selector) | 選取含有選擇器所匹配的元素的元素 | 集合元素 | $(“div:has(p)”)選取含有p元素的div元素 |
| :parent | 選取含有子元素或者文本的元素 | 集合元素 | $(“div:parent”)選取擁有子元素(包括文本元素)的div元素 |
?
?
③可見性過濾選擇器
?
| 選擇器 | 描述 | 返回 | 示例 |
| :hidden | 選取所有不可見元素 | 集合元素 | $(“:hidden”)選取所有不可見元素,包括<input type=”hidden”/>,<div style=”display:none;”>和<div style=”visibility:hidden”>等元素,如果只選取<input>元素,使用$(“input:hidden”) |
| :visible | 選取所有可見元素 | 集合元素 | #(“div:visible”)選取所有可見<div>元素 |
?
?
?
④屬性過濾選擇器
?
過濾規則是通過元素的屬性來獲取相應的元素
?
| 選擇器 | 描述 | 返回 | 示例 |
| [attribute] | 選取擁有此屬性的元素 | 集合元素 | $(“div[id]”)選取擁有屬性id的元素 |
| [attribute=value] | 選取屬性為value元素 | 集合元素 | $(“div[title=test]”)選取屬性title為”test”的<div>元素 |
| [attribute!=value] | 選取屬性不等于value的元素 | 集合元素 | $(“div[title!=test]”)選取屬性title不等于”test”的<div>元素(*沒有有title屬性的<div>元素也會被選取) |
| [attribute^=value] | 選取屬性值以value開始的元素 | 集合元素 | $(“div[title^=test]”)選取屬性title以”test”開始的<div>元素 |
| [attribute$=value] | 選取屬性值以value結束的元素 | 集合元素 | $(“div[title$=test]”)選取屬性title以”test”結束的<div>元素 |
| [attribute*=value] | 選取屬性值含有value的元素 | 集合元素 | $(“div[title*=test]”)選取屬性title含有”test”的<div>元素 |
| [selector1][selector2] [selectorN] | 用屬性選擇器合并成一個符合屬性選擇器,滿足多個條件,每選擇一次,縮小一次范圍 | 集合元素 | $(“div[id][title$=“test”]”)選取擁有屬性id,并且屬性title以”test”結束的<div>元素 |
?
?
?
⑤子元素過濾選擇器
?
| 選擇器 | 描述 | 返回 | 示例 |
| :nth-child (index/even/odd/ equation) | 選取每個父元素下的第index個子元素或者奇偶元素(index從1算起) | 集合元素 | :eq(index)只匹配一個元素,而:nth-child將為每一個父元素匹配子元素,并且:nth-child(index)的index從1開始,而:eq(index)是從0開始 |
| :first-child | 選取每個父元素的第1個子元素 | 集合元素 | :first只返回單個元素,而:first-child選擇符將為每個父元素匹配第一個子元素。 例:$(“ul li:first-child”)選取每個<ul>中第一個<li>元素 |
| :last-child | 與上例相反 | 集合元素 | 與上例相反 |
| :only-child | 如果某個元素是它父元素中唯一的子元素,那么將會被匹配,如果父元素中含有其他元素,則不會被匹配 | 集合元素 | $(“ul li:only-child”)在<ul>中選取是唯一子元素的<li>元素 |
?
* :nth-child()選擇器是很常用的子元素過濾選擇器,功能如下:
?
(1) :nth-child(even)能選取每個父元素下的索引值是偶數的元素
?
(2) :nth-child(odd) 能選取每個父元素下的索引值是奇數的元素
?
(3) :nth-child(2)?? 能選取每個父元素下的所以只等于2的元素
?
(4) :nth-child(3n)? 能選取每個父元素下的索引值是3的倍數的元素(n從0開始)
?
(5) :nth-child(3n+1)能選取每個父元素下的索引值是(3n+1)的元素(n從0開始)
?
?
?
⑥表單對象屬性過濾選擇器
?
| 選擇器 | 描述 | 返回 | 示例 |
| :enabled | 選取所有可用元素 | 集合元素 | $(“#form1 :enabled”)選取id為”form1”的表單內的所有可用元素 |
| :disabled | 選取所有不可用元素 | 集合元素 | $(“#form2 :disabled”)選取id為”form2”的表單內所有不可用的元素 |
| :checked | 選取所有被選中元素(單選框/復選框) | 集合元素 | $(“input :checked”)選取所有被選中的<input>元素 |
| :selected | 選取所有被選中的選項元素(下拉列表) | 集合元素 | $(“select :selected”)選取所有被選中的選項元素 |
?
?
?
?
2.3.4 表單選擇器
?
| 選擇器 | 描述 | 返回 | 示例 |
| :input | 選取所有<input>/<textarea>/<select>和<button>元素 | 集合元素 | $(“:input”) 選取所有<input>/<textarea>/<select>和<button>元素 |
| :text | 選取所有的單行文本框 | 集合元素 | $(“:text”)選取所有單行文本框 |
| :password | 選取所有密碼框 | 集合元素 | $(“:password”)選取所有密碼框 |
| :radio | 選取所有單選框 | 集合元素 | $(“:radio”)選取所有的單選框 |
| :checkbox | 選取所有多選框 | 集合元素 | $(“:checkbox”)選取所有復選框 |
| :submit | 選取所有提交按鈕 | 集合元素 | $(“:submit”) |
| :image | 選取所有圖像按鈕 | 集合元素 | $(“:image”) |
| :reset | 選取所有重置按鈕 | 集合元素 | $(“:reset”) |
| :button | 選取所有按鈕 | 集合元素 | $(“:button”) |
| :file | 選取所有的上傳域 | 集合元素 | $(“:file”) |
| :hidden | 選取所有不可見元素 | 集合元素 | $(“:hidden”) |
?
?
?
?
轉載于:https://www.cnblogs.com/cimuly/p/6028458.html
總結
以上是生活随笔為你收集整理的第二章(jQuery选择器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理收集
- 下一篇: 责任链模式——HeadFirst设计模式