开发者

Case-insensitive attribute-value selector with Jquery

I need to get the value of the content attribute of a 开发者_运维百科certain meta tag.

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

is how I usually do it. For business reasons, someKindOfId may be somekindofid. It could be other combinations of cases as well. I don't know.

What is the best way to search for this meta tag? Adding an id or other identifier is out of the question.


You could use the jquery filter function like so

var meta = $('meta[name]').filter(function() {
    return this.name.toLowerCase() == 'somekindofid';
});

Based upon CSS selector case insensitive for attributes

http://jsfiddle.net/nickywaites/mkBvC/


Also, for case insensitive attribute *= selector:

$("meta[name*=someKindOfId]")

You can use:

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


How about this?

You can reuse the case-insensitive jQuery expression, as shown in the snippet below (execute it to see how the first div matches, while the second does not).

$.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>

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜