Javascript jQuery选择器:匹配数组属性的第n个值

Javascript jQuery选择器:匹配数组属性的第n个值,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我有一个HTML5对象集的属性,它是一个数组。差不多 <button attr=[1,0,0,0,1,1]>test</button> <button attr=[1,1,0,0,1,1]>test</button> ... 我如何构造一个jQuery选择器来只匹配attr的第n个值为1的元素?类似于$attr[1]=1的东西,它只会选择本例中的第二个按钮。这种语法不起作用,但我编写它只是为了了解我需要什么 在我的例子中,我不是在处理按钮,而是处

我有一个HTML5对象集的属性,它是一个数组。差不多

<button attr=[1,0,0,0,1,1]>test</button>
<button attr=[1,1,0,0,1,1]>test</button>
...
我如何构造一个jQuery选择器来只匹配attr的第n个值为1的元素?类似于$attr[1]=1的东西,它只会选择本例中的第二个按钮。这种语法不起作用,但我编写它只是为了了解我需要什么


在我的例子中,我不是在处理按钮,而是处理其他类型的对象,我只是想简化问题的上下文。

您可以使用自定义过滤器仅选择匹配的元素

按钮1 按钮2 请注意,attr不是按钮的有效html属性。我建议您改用data attr。您可以使用.data'attr'返回数据

所选变量=$'button'.filterfunction idx{ var attr=$this.data'attr'; 返回attr&&attr[1]==1; }; alertselected.html;
可以使用自定义过滤器仅选择匹配的元素

按钮1 按钮2 请注意,attr不是按钮的有效html属性。我建议您改用data attr。您可以使用.data'attr'返回数据

所选变量=$'button'.filterfunction idx{ var attr=$this.data'attr'; 返回attr&&attr[1]==1; }; alertselected.html;
您可以这样编写自己的选择器,我称之为数组,您可以在此处使用更好的名称:

jQuery.expr[':'].array = function (elem, index, match) {
    var params = match[3].replace(/^\s+|\s+$/g, '').split(/\s*,\s*/),
        attribute = params[0],
        arrayindex = parseInt(params[1]),
        matchvalue = params[2],
        value = JSON.parse($(elem)[attribute](attribute));
    return value[arrayindex] == matchvalue;
};
然后,像任何其他选择器一样使用它,其中第一个参数是属性的名称,第二个参数是数组中的索引,第三个参数是期望值:

$('button:array(attr,1,1)');

Fiddle:

您可以像这样编写自己的选择器我称之为数组,您可以在此处使用更好的名称:

jQuery.expr[':'].array = function (elem, index, match) {
    var params = match[3].replace(/^\s+|\s+$/g, '').split(/\s*,\s*/),
        attribute = params[0],
        arrayindex = parseInt(params[1]),
        matchvalue = params[2],
        value = JSON.parse($(elem)[attribute](attribute));
    return value[arrayindex] == matchvalue;
};
然后,像任何其他选择器一样使用它,其中第一个参数是属性的名称,第二个参数是数组中的索引,第三个参数是期望值:

$('button:array(attr,1,1)');
小提琴: