jQuery內容過濾器簡介
內容過濾器作用在找出元素內是否含有內容或關係,以產生所需要集合元素。jQuery內容過濾器速查表
過濾器 | 說明 | 範例 |
---|---|---|
:contains(text) | 選擇包含指定文字(text)的元素。 | $(':contains(text)') |
:empty | 選擇沒有子元素的元素(包含文字節點)。 | $(':empty') |
:has(selector) | 選擇包含有selector的selector。 | $(':has(selector)') |
:parent | 選擇包有父子元素的元素(包含文字節點)。 | $(':parent') |
jQuery內容過濾器範例
:contains(text)過濾器範例:過濾出包含特定文字的元素。
符合的text可以直接出現在所選擇的元素中,或在該元素的任何後代元素中。:contains(text)中括號內(text)的文字可為空,或用引號包圍。<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div>John Resig</div> <div>George Martin</div> <div>Malcom John Sinclair</div> <div>J. Ohn</div> <script> // 1. 由div元素中過濾出包含文字John的元素 $("div:contains('John')").css("text-decoration", "underline");</script> </body> </html>
:empty過濾器範例:在所有元素中找出無子元素或文字的元素
:empty過濾器與:parent過濾器相反。注意,:empty與:parent的子元素包含文字節點。
<!DOCTYPE html> <html> <head> <style> td { text-align:center; } </style> <script src="http://code.jquery.com/jquery-latest.min.js"></script> </head> <body> <table border="1"> <tr><td>TD #0</td><td></td></tr> <tr><td>TD #2</td><td></td></tr> <tr><td></td><td>TD#5</td></tr> </table> <script> // 1. 由td集合元素中過濾出沒有子元素的td元素 $("td:empty").text("Was empty!").css('background', 'rgb(255,220,200)');</script> </body> </html>在W3C的建議中<p>元素至少有一個子節點,即使這個子節點是文字(http://www.w3.org/TR/html401/struct/text.html#edef-P)。另一方面,其他一些元素是空元素,例如,<input>、<img>、<br>、<hr>。
:has(selector)過濾器範例:由div集合元素(selector)中,過濾出包含有p元素(selector)的div
:has(selector)過濾器,想像成If a and b then ...這種條件式裡的b條件,先符合a條件和(and)符合b條件的選擇出來。<!DOCTYPE html> <html> <head> <style> .test{ border: 3px inset red; } </style> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <div><p>Hello in a paragraph</p></div> <div>Hello again! (with no paragraph)</div> <script> // 1. 由div集合元素(selector)中,過濾出包含有p元素(selector)的div $("div:has(p)").addClass("test");</script> </body> </html>$("div:has(p)")裡p元素可以在div元素內的任何地方(另一種稱法:任何後代,任一階層)。
因為:has()是一個jQuery所延伸方法,並不是CSS規格的一部分,執行:has()查詢在原生DOM的querySelectorAll()方法中,並不能得到有利的執行效能。在主流瀏覽器中想要得到更好的效能,使用$("your-pure-css-selector").has(selector/DOMElement)來替代。
:parent過濾器範例:...。
:parent過濾器與:empty過濾器相反。注意,:empty與:parent的子元素包含文字節點。
<!DOCTYPE html> <html> <head> <style> td { width:40px; background:green; } </style> <script src="http://code.jquery.com/jquery-latest.min.js"></script> </head> <body> <table border="1"> <tr><td>Value 1</td><td></td></tr> <tr><td>Value 2</td><td></td></tr> </table> <script> // 1. 由td集合元素中過濾出含有子元素和父元素的td $("td:parent").fadeTo(1500, 0.3);</script> </body> </html>在W3C的建議中<p>元素至少有一個子節點,即使這個子節點是文字(http://www.w3.org/TR/html401/struct/text.html#edef-P)。另一方面,其他一些元素是空元素,例如,<input>、<img>、<br>、<hr>。
因為:parent是一個jQuery所延伸方法,並不是CSS規格的一部分,執行:parent查詢在原生DOM的querySelectorAll()方法中,並不能得到有利的執行效能。想要得到更好的效能,使用$("your-pure-css-selector").filter(":parent")來替代。
KKBruce補充
內容過濾器,先有"內容"再進行"過濾",從上面範例中我們可以看得出來,我們都是要從一個集合元素裡想取出特定條件(b條件)時使用內容過濾器。要注意替代用法,:has()改用.has(),:parent改用.filter(":parent")來替代,盡量一開始就使用推薦的替代用法。jQuery基礎選擇器修改歷程
[2011/12/28] 參考 jQuery 1.7 文件翻譯編寫。- Content Filters :contains()
- Content Filters :empty
- Content Filters :has()
- Content Filters :parent
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。