2011-10-21 55 views
5

我正在嘗試爲YouTube編寫一個userscript,它將根據標題選擇頁面上的所有視頻,這些標題也被設置爲縮略圖'title屬性。JQuery - 如何編寫不區分大小寫的'屬性包含'選擇器?

下工作得很好,但它是區分大小寫:

var videoTitle = "the"; 

$('img[title*="'+videoTitle+'"]').each(function() { 

// stuff here 

}); 

的選擇上面將匹配在標題「的」,但不是「」或「」的任何視頻,例如。

我的確讀過我可以使用.filter()來完成這個任務,但我不確定這是如何工作的,而且我也找不到能夠成功適合我的場景的示例。

我想是這樣的,根據一個例子,我在計算器上找到,但它不工作:

$('img[title]').filter(function(){return this.title.toLowerCase() == videoTitle}).each(function() { 

// stuff here 

}); 

回答

9

這是改編自Karl Swedburg在jQuery docs page上爲'Attributes Contains Selector'提供的帖子。它使用正則表達式,並與filter功能沿i不區分大小寫開關 -

<img title="Star Wars"/> 
<img title="Star Wars 2"/> 
<img title="Star Wars 3"/> 
<img title="Back To The Future"/> 

var videoTitle = "star wars"; 
var re = RegExp(videoTitle ,"i"); 
$('img[title]').filter(function() { 
    return re.test(this.title); 
}).each(function() {alert(this.title)}); 

三個「星球大戰」電影的名字應該被警告。

演示 - http://jsfiddle.net/FKBTx/3

+0

謝謝。在我發佈這個問題後,我寫了這個腳本的朋友說他不需要它是不區分大小寫的,並且按照我的方式來使用腳本。儘管如此,我測試了這一點,它效果很好,我很積極,它會在某個時候派上用場。再次感謝。 – vertigoelectric

+0

有沒有辦法用自定義的'data-'屬性來執行相同的過濾器? – bukka

0

使用過濾器選項,只是改變功能 return this.title.toLowerCase().indexOf(videoTitle) >= 0 否則就只匹配'the',而不是包含'the'的東西(如果這就是你想要的)。
編輯:另外,不知道this.title是確定的,但也許如果上述方法無效,請嘗試$(本).attr(「標題」)

0
$('img').filter(function (index) { return this.title.toLowerCase() === videoTitle; }) 
0

這應該工作:

var videoTitle = "bla"; 
$('img').filter(function() { 
    return $(this).attr('title').toLowerCase() == videoTitle; 
}).each(function() { 
    // do something 
}); 
1

示例 -

$('img').filter(function(){ 
    return this.title.match(RegExp(videoTitle ,"i")) 
}).each(function(){ 
     alert(this.title); 
}) 
相關問題