jQuery屬性過濾器簡介
屬性過濾器針對
HTML元素裡的屬性及屬性值來進行過濾與選擇的動作。例如,<a href="http://blog.kkbruce.net">KKBruce Blog</a>,我一天我想幫整個網站裡的連結加上target屬性,怎麼加?打開編輯器,一頁一頁慢慢看慢慢加?用搜尋目錄來取代?
jQuery屬性過濾器速查表
jQuery屬性過濾器
過濾器 |
說明 |
範例 |
[name|="value"] |
選擇指定屬性等於字串值或以該字串為前綴的值(以字串後跟著一個連字符號"-")的元素。
這個過濾器是引入CSS規範來處理語言屬性。
|
$('[attribute|=value]') |
[name*="value"] |
選擇指定屬性包含特定字串值,不論在字串中的位置。 |
$('[attribute*=value]') |
[name~="value"] |
選擇指定屬性包含特定字串值,字串用空格分隔。 |
$('[attribute~=value]') |
[name$="value"] |
選擇指定屬性的字串是以字串值結尾。
這個比較區分大小寫。
|
$('[attribute$=value]') |
[name="value"] |
選擇指定屬性的字串等於字串值。 |
$('[attribute=value]') |
[name!="value"] |
選擇沒有指定屬性的元素,或指定屬性的字串不等於字串值。 |
$('[attribute!=value]') |
[name^="value"] |
選擇指定屬性的字串是以字串值開頭。 |
$('[attribute^=value]') |
[name] |
選擇所有具有指定屬性的元素,該屬性的字串可以是任何值。 |
$('[attribute]') |
[name="value"][name2="value2"] |
選擇符合所有指定屬性過濾器的元素 |
$('[attribute1=value1][attribute2=value2]') |
attribute是一個屬性名稱,value是一個字串值,字串值的單雙引號(""或'')是選擇性,例如,$('[attribute|=
value]')或$('[attribute|=
"value"]')都是正確的。
jQuery屬性過濾器範例
[name|="value"]過濾器範例:找出所有連結(a元素)有hreflang屬性且是英文(english)
[name|="value"]過濾器會執行兩個條件的過濾選擇,一是字串值等於value,二是字串值等於value-開頭。
注意:英文在網頁中的簡稱為en與en-UK,又例如中文有"zh"、"zh-tw"、"zh-hant"、"zh-cn",而不是english或chinese。
<!DOCTYPE html>
<html>
<head>
<style>
a { display: inline-block; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<a href="example.html" hreflang="en">Some text</a>
<a href="example.html" hreflang="en-UK">Some other text</a>
<a href="example.html" hreflang="english">will not be outlined</a>
<script>
// 1. 選擇a集合元素裡hreflang屬性字串前綴為en及en-開頭的a元素
$('a[hreflang|="en"]').css('border','3px dotted green');
</script>
</body>
</html>
雖然我們下的條件字串值為"en",但依CSS規格,它會把字串值改為兩段來過濾,一是字串值為"en",二是字串前綴為"en-"開頭的字串值,都是符合選擇條件的元素。
[name*="value"]過濾器範例:...。
字串值(value)可以出現在位何位置。
07 | < input name = "man-news" /> |
08 | < input name = "milkman" /> |
09 | < input name = "letterman2" /> |
10 | < input name = "newmilk" /> |
12 | // 1. 選擇input集合元素裡有name屬性且字串值的任何位置有man字串 |
13 | $("input[name*='man']").val("has man in it!");</ script > |
[name*=value]很像關鍵字搜尋,只要你的字串中有符合的關鍵字,就會被選擇。
[name~="value"]過濾器範例:由特定集合元的素屬性中選擇特定字串,字串必須由空格分隔
假設name的字串值有三組,"KKBruce"、"KK Bruce"、"KingKong Bruce",而且下的條件為[name~="Bruce"],符合的會有"KK Bruce"及"KingKong Bruce",因為只有這兩組的Bruce是用"空格分隔"。
07 | < input name = "man-news" /> |
08 | < input name = "milk man" /> |
09 | < input name = "letterman2" /> |
10 | < input name = "newmilk" /> |
12 | // 1. 由input集合元素中搜尋有屬性name且"man字串是用空格分隔" |
13 | $('input[name~="man"]').val('mr. man is in it!');</ script > |
記得,[name~="value"]屬性過濾器強調在「空格分隔」這個作用上。
[name$="value"]過濾器範例:由特定集合元素屬性中選擇特定字串,字串必須是在結尾處
注意,此[name$="value"]過濾器會區分大小寫,例如,[name$="bruce"]與[name$="Bruce"]兩個是不一樣的條件。
07 | < input name = "newsletter" /> |
08 | < input name = "milkman" /> |
09 | < input name = "jobletter" /> |
11 | // 1. 由input集合元素中搜尋有屬性name且"letter字串結尾" |
12 | $('input[name$="letter"]').val('a letter');</ script > |
JavaScript語言本身就是會區別大小寫,不知道jQuery文件為什麼在此屬性特別強調這一段。大小寫問題是出錯機會很高的一部分,不然常常會出現,程式怎麼查都對,結果就是出不來。
[name="value"]過濾器範例:由特定集合元素屬性中選擇特定字串,字串必須完全符合字串值
這是屬性過濾器中最簡單的一個,要完全符你所下的屬性及字串值才會選擇。
09 | < input type = "radio" name = "newsletter" value = "Hot Fuzz" /> |
15 | < input type = "radio" name = "newsletter" value = "Cold Fusion" /> |
21 | < input type = "radio" name = "newsletter" value = "Evil Plans" /> |
26 | // 1. 由input集合元素中找出有value屬性且字串值為"Hot Fuzz" |
27 | // 2. .next() 此input元素的下一個元素(span) |
29 | $('input[value="Hot Fuzz"]').next().text(" Hot Fuzz");</ script > |
很明顯,只有第一個input元素會被選擇,然後找下一個元素(span),在span元素內寫入字串" Hot Fuzz"。
[name!="value"]過濾器範例:由特定集合元素屬性中選擇特定字串,字串必須不含字串值
[name!="value"]過濾器與[name="value"]過濾器為相反關係
08 | < input type = "radio" name = "newsletter" value = "Hot Fuzz" /> |
09 | < span >name is newsletter</ span > |
12 | < input type = "radio" value = "Cold Fusion" /> |
16 | < input type = "radio" name = "accept" value = "Evil Plans" /> |
17 | < span >name is accept</ span > |
20 | // 1. 由input集合元素中找出有name屬性,且字串值不等於newsletter |
22 | // 3. .append() 附加HTML Tag至元素中 |
23 | $('input[name!="newsletter"]').next().append('< b >; not newsletter</ b >');</ script > |
[name!="value"]過濾器等同於:not([attribute=value])。
因為[name!="value"]是一個jQuery所延伸方法,並不是CSS規格的一部分,執行:has()查詢在原生DOM的querySelectorAll()方法中,並不能得到有利的執行效能。
在主流瀏覽器中想要得到更好的效能,使用$("your-pure-css-selector").not('[attribute="value"]')來替代。
[name^="value"]過濾器範例:由特定集合元素屬性中選擇特定字串,字串開頭須含字串值
[name^="value"]與[name$="value"]為互為對照,一個是找開頭字串,一個是找結尾字串。
07 | < input name = "newsletter" /> |
08 | < input name = "milkman" /> |
09 | < input name = "newsboy" /> |
11 | // 1. 由input集合元素中找出有name屬性,且字串值開頭為news字串 |
13 | $('input[name^="news"]').val('news here!');</ script > |
本選擇器可用來識別由伺服器端框架所產生的HTML頁面裡的系統性單元ID。然而,它將會比類別選擇器來的慢,因為類別選擇器可以將單元ID群組化。
[name]過濾器範例:由特定集合元素找含有特定屬性,字串值可為任何值
只找含有特定屬性的元素。
08 | < div id = "hey" >with id</ div > |
09 | < div id = "there" >has an id</ div > |
12 | // 1. 由div集合元素且有設定id屬性的元素 |
14 | $('div[id]').one('click', function(){ |
15 | // 1. 取得div的文字串接此div的id名稱 |
16 | var idString = $(this).text() + ' = ' + $(this).attr('id'); |
18 | $(this).text(idString); |
這個範例只有div且有設定id屬性的div元素會被選擇,效果必須由你去點擊才會產生,點擊產生的效會改變文字內容。
[name="value"][name2="value2"]過濾器範例:設定多組屬性過濾條件,只有全部符合的元素會被選擇
設定多組屬性過濾條件,只有全部符合的元素會被選擇。
07 | < input id = "man-news" name = "man-news" /> |
08 | < input name = "milkman" /> |
09 | < input id = "letterman" name = "new-letterman" /> |
10 | < input name = "newmilk" /> |
14 | // 3. 有設定name屬性且結尾為字串"man"(過濾條件二) |
15 | $('input[id][name$="man"]').val('only this one');</ script > |
KKBruce補充
屬性選擇器讓我們在
操控HTML的屬性上可以很大的幫助,例如,我想設定a元素中提供pdf下載的連結樣式與圖示,$('a[href$=".pdf"]').css('...')。我又想設定壓縮檔的下載連結樣式與圖示,同理,$('a[href$=".7z"]').css('...'),透過集合元素+屬性過濾器,可以很精準的選擇你所想要的元素。
jQuery屬性過濾器修改歷程
[2012/1/4] 參考 jQuery 1.7 文件翻譯編寫。
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。