如何通过匹配部分属性来选择带有jQuery的元素?

时间:2014-02-08 19:56:23

标签: javascript jquery jquery-selectors

例如,我想匹配所有属性中包含“data-foo”的元素:

<a data-foo="abc" href="#">I'm Matched</a>
<a data-foo-bar="abc" href="#">I'm Matched Too</a>
<a data-foo-bar-baz="abc" href="#">I'm Matched Too</a>

<a data-bar-foo="abc" href="#">I'm Not Matched</a>

我可以轻松遍历所有元素并检查自己,但我不确定jQuery是否支持这种类型的选择器。

2 个答案:

答案 0 :(得分:1)

检查这个小提琴......有点在那里,但也许你可以解决这个问题

JSFiddle

$("a").each(function(){
    var element = $(this);
    var isItMe = 0;
        $(element[0].attributes).each(function() {
             if(this.nodeName.indexOf("data-bar") >= 0){
                isItMe = 1;
             }
        });
    if(isItMe == 1){
        $(this).css({"color" : "red"});  
    }
});

答案 1 :(得分:0)

Satpal的答案相当不错(我喜欢选择器仅限于<a>元素;这比搜索整个DOM要快一点。)

但我建议您使用多个数据属性。例如:

<a data-foo="abc" href="#">I'm Matched</a>
<a data-foo="abc" data-foo-bar="abc" href="#">I'm Matched Too</a>
<a data-foo="abc" data-foo-bar-baz="abc" href="#">I'm Matched Too</a>

<a data-bar-foo="abc" href="#">I'm Not Matched</a>

或班级:

<a class="foo" data-foo="abc" href="#">I'm Matched</a>
<a class="foo" data-foo-bar="abc" href="#">I'm Matched Too</a>
<a class="foo" data-foo-bar-baz="abc" href="#">I'm Matched Too</a>

<a data-bar-foo="abc" href="#">I'm Not Matched</a>

通过这种方式,您可以匹配一件事(data-foo或类foo),并获得您所需的特异性。