JQuery - 如何编写不区分大小写的“Attribute Contains”选择器?

时间:2011-10-21 18:44:11

标签: jquery attributes selector case-insensitive

我正在尝试为YouTube编写用户脚本,该用户脚本将根据标题选择页面上的所有视频,这些标题也会设置为缩略图“title属性。

以下工作正常,但它区分大小写:

var videoTitle = "the";

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

// stuff here

});

上面的选择器会匹配标题中带有“the”的所有视频,但不会匹配“The”或“THE”。

我确实读过我可以使用.filter()以某种方式完成此操作,但我不确定它是如何工作的,而且我找不到一个能够成功适应我的场景的示例。

我根据我在StackOverflow上找到的一个例子尝试了类似的东西,但它不起作用:

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

// stuff here

});

5 个答案:

答案 0 :(得分:9)

这是改编自Karl Swedburg关于'Attributes Contains Selector'的jQuery docs page的帖子。它使用RegEx和i不区分大小写的开关以及filter函数 -

<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

答案 1 :(得分:1)

示例 -

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

答案 2 :(得分:0)

  

使用过滤器选项,只需将功能更改为   return this.title.toLowerCase().indexOf(videoTitle) >= 0   否则它只匹配'the',而不是包含'the'的东西(如果那就是你想要的东西)   编辑:此外,不确定this.title是否正常,但也许如果以上不起作用,请尝试$(this).attr('title')

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这应该有效:

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