使用数据属性基于具有多个Ids的数组过滤DOM节点

时间:2015-03-21 22:25:52

标签: jquery jquery-selectors underscore.js

给出以下标记

<div class="group-one">
  <span data-id="1">
  <span data-id="2">
  <span data-id="3">
</div>

<div class="group-two">
  <span data-id="1">
  <span data-id="2">
  <span data-id="3">
</div>

我想使用data-id

数组过滤节点

因此,如果我有ids=[1,2],我希望结果是两个节点对应于数组中的一个节点,在其中一个组内。

ids=[1,2]
nodes = $(".group-one").children();
#nice way of filtering the nodes using ids array. With Jquery.filter or Underscore

我知道我可以通过所有子节点进行迭代,并比较每个节点data-id。但是我想知道是否可以通过仅使用选择器来实现这一点,或者使用其他一些解决方案。

谢谢!

2 个答案:

答案 0 :(得分:1)

只是根据数据属性过滤?

var ids=[1,2];

$('div span').filter(function() {
    return ids.indexOf( $(this).data('id') ) !=  -1;
});

FIDDLE

答案 1 :(得分:1)

仅使用jQuery选择器的解决方案:

var filteredNodes = nodes.filter(function() {
    // Attributes are strings, so you have to convert int.
    var i = parseInt($(this).attr('data-id'));
    return $.inArray(i, ids) >= 0;
});