2

我有一个在 data 属性中使用数组的 html 元素

<div data-area='["North America", "United Kingdom"]'>Test</div>

我有多个与不同“事物”有关的数据属性

<div data-area='["North America", "United Kingdom"]' data-job='["Programmer","Scientist"]'>test</div>

如何根据 1 个值搜索整个元素上的所有数据属性标签?

我正在尝试使用选择器而不是遍历每个数据属性,这可能吗?

这是一个例子加上我尝试过的一个小提琴。

// search all data attributes of a div element that contains the given value and apply a hidden class
// this should search every data attribute for "Programmer"
$('[data-*="Programmer"]').addClass('hidden');

http://jsfiddle.net/pWdSP/1/

4

1 回答 1

1

我只能想到这个解决方案:

$('body *').addClass(function() {
    var data = $(this).data();
    for (var i in data) if (data.hasOwnProperty(i)) {
        if (data[i].indexOf('Programmer') > -1) {
            return;
        }
    }

    return 'hidden';
});

http://jsfiddle.net/pWdSP/4/

它不是最优的,因为它遍历所有 DOM 节点,但我没有看到其他方法来选择所有具有data-*属性的节点。

如果对应该检查哪些节点有一些更精确的标准 - 强烈建议相应地更改选择器(而不是body *

于 2013-06-19T22:49:34.590 回答