2011-10-21 40 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); 
}) 
相关问题