如何使用多个属性选择器但是/具有特定的属性值?

时间:2014-06-04 06:26:35

标签: javascript jquery html5 jquery-selectors attributes

我正在使用jQuery,我有以下HTML代码:

<a href="/link" data-a='{"one":"sample1","two":"sample2"}' data-b="true">Title</a>

我想使用multiple attribute selectors找到上述链接,但是/ {包含data-*属性中的特定值。也就是说,我可以通过这种方式找到上述链接

selector = 'a[data-a][data-b]'
$(selector).bind(...)

但我希望通过查找包含data-adata-b属性且其属性data-a包含one密钥的链接来更具体。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

解析属性的内容超出了attribute selectors的范围。您需要通过filtering所选元素手动执行此操作:

$('a[data-a][data-b]').filter(function() {
    try {
        return "one" in JSON.parse($(this).attr("data-a"));
    } catch(e) {
        return false;
    }
}).on(…)

你当然可以implement a custom selector(或use a regex selector 1 ),但这并没有多大区别。并且可能会大大降低性能。

1:呃,最好不要使用JSON。

答案 1 :(得分:0)

这将有效,但不保证数据-a是有效的json lol

select = 'a[data-a*=\'"one":"\'][data-b]';

使用&#39;包含&#39;选择器:http://api.jquery.com/attribute-contains-selector/

答案 2 :(得分:0)

我们可以.filter()第一组集合,以确保元素的data- *属性是否包含特定键。

你可以这样做,

$('a[data-a][data-b]').filter(function(){
 return 'key' in JSON.parse($(this).data('a'));
}).bind(..)