2014-03-13 71 views
0

我有一組HTML5對象屬於一個數組。類似於jQuery選擇器:匹配數組屬性的第n個值

<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")這樣的東西只會從這個例子中選擇第二個按鈕(這個語法不起作用,但我只是爲了瞭解我需要的東西而編寫的)。

在我的情況下,我不是處理按鈕,但與其他類型的對象,我只是想簡化問題的上下文。

回答

3

您可以使用自定義過濾器來僅選擇匹配的元素。

<button data-attr="[1,0,0,0,1,1]">button 1</button> 
<button data-attr="[1,1,0,0,1,1]">button 2</button> 

請注意attr不是按鈕的有效html屬性。我建議你改用data-attr。您可以使用.data('attr')獲取數據。

var selected = $('button').filter(function (idx) { 
    var attr = $(this).data('attr'); 
    return attr && attr[1] == 1; 
}); 
alert(selected.html()); 

jsFiddle Demo

+0

謝謝,這個伎倆! –

1

你可以寫你自己的選擇是這樣的(我把它叫做 「陣」,你可以使用一個更好的名字在這裏):

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)'); 

小提琴:http://jsfiddle.net/pascalockert/uDnK8/2/