使用Jquery的不区分大小写的属性值选择器

14

我需要获取特定 meta 标签的 content 属性的值。

var someContent = $("meta[name=someKindOfId]").attr("content");

这是我通常的做法。出于商业目的,someKindOfId 可能会变成 somekindofid,也可能是其他大小写组合的形式。我不知道。

最佳的搜索元标签的方法是什么?添加ID或其他标识符是不可行的。


请查看这篇帖子,有很好的解决方案:https://dev59.com/7XVC5IYBdhLWcg3wxEN1 - Eli
3个回答

27

1
完美。var someContent = $('meta[name]').filter(function() { return this.name.toLowerCase() == 'somekindofid'; }).attr("content"); - Josh Johnson
我注意到这个解决方案只会返回一个 meta 标签的内容。我不确定是否会有多个名称相同的 meta 标签,但这是更新后的示例 - http://jsfiddle.net/nickywaites/mkBvC/1/ - Nicky Waites
这是一个可行的解决方案,但不太可重用。请查看我的jQuery表达式答案。 :) - alexcasalboni

5
此外,对于不区分大小写的属性 *= 选择器:
$("meta[name*=someKindOfId]")

您可以使用:

$('meta').filter(function() {
       return (/somekindofid/i).test($(this).attr('name'));
}).attr("content")

这就像是 *=,而不是 =,但这正是我在寻找的。 - Erik Aronesty

0
这个怎么样?
您可以重复使用不区分大小写的jQuery表达式,就像下面的代码片段中所示(执行它以查看第一个
与第二个
不匹配的方式)。

$.expr[':'].iAttrContains = function(node, stackIndex, properties){
    var args = properties[3].split(',').map(function(arg) {
        return arg.replace(/^\s*["']|["']\s*$/g, '');  
    });
    if ($(node).attr(args[0])) {
        //exact match:
        return $(node).attr(args[0]).toLowerCase() == args[1].toLowerCase();
        //if you actually prefer a "contains" behavior:
        //return -1 !== $(node).attr(args[0]).toLowerCase().indexOf(args[1].toLowerCase());
    }
};

$("div:iAttrContains('data-name', 'test')").addClass('matched');
div{background:red;}
div.matched{background:green;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div data-name="This is a test">First div</div>
<div data-name="This is a div">Second div</div>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接