按自定义数据属性值查找元素

时间:2012-10-26 21:35:26

标签: javascript jquery jquery-ui

我想知道是否有办法根据jQuery(+ jQuery UI lib)的数据属性值使用javascript选择一个项目(div,span,等等..)。例如,假设我有:

<div class="b">Hi</div>

然后我为它分配了一些数据:

$('.b').data('myKey', 1234);

然后,我想找到满足条件myKey = 1234的div(或多个div)。 例如,像这样:

var resultingElement = $('.b:data(myKey=1234)');

默认是可行的,还是我必须自己实现这种选择器? 不,我不想为此使用HTML5的可见数据 - *属性。

3 个答案:

答案 0 :(得分:3)

您可以创建自定义伪选择器以简化操作:http://jsfiddle.net/g2xKB/1/

$.expr.pseudos.data = $.expr.createPseudo(function(args) {
    var items = args.split(",");  // the arguments (key, value)

    $.each(items, function(i, item) {
        item = item.trim();
        var isString = /^['"]|['"]$/.test(item);
        item = item.replace(/^['"]|['"]$/g, "");  // remove quotes

        if(!isString) {
            item = +item;  // if no quotes, it's a number
        }

        items[i] = item;
    });

    return function(elem) {
        return $.data(elem, items[0]) === items[1];
    }
});

然后您可以按如下方式使用它:

$(".b:data('myKey', 1234)").css("color", "red");

答案 1 :(得分:1)

试试这个

    $("div.b").filter(function() { 
          return $.data(this, "myKey") == 1234; 
    });

答案 2 :(得分:0)

var resultingElement = $('.b[data-myKey=1234]');

我不确定100%肯定,但我认为在某些时候数据属性中存在驼峰式选择器的问题。