根据提供的数据属性值选择多个tr

时间:2015-04-29 08:34:34

标签: javascript jquery

我正在尝试选择所有具有1,2的数据属性id的行。我可以通过单独指定每一行来实现,但这不是最好的方法,有人可以把我放在正确的方向吗?

<table id="eTable">
  <tr data-empid="A123" data-salary="120" data-status="drone">
    <td>Peter</td><td>Vogel</td><td>Principal</td>
  </tr>
  <tr data-empid="B456" data-salary="130" data-status="worker">
    <td>Jan</td><td>Vogel</td><td>General Manager</td>
  </tr>
  <tr data-empid="C789" data-salary="110" data-status="worker">
    <td>Jason</td><td>van de Velde</td><td>Company nurse</td>
  </tr>
</table>

选择

var getFromWebServices = //GetFromWebServices() //result lets assume A123; B456
$("#eTable tr[data-empid='A123; B456']").hide(); // hide is here for an example, I want to get object with all rows for matching IDs

我希望它是动态的。我希望这个选择器获得带有empid A123的行; B456在这个特定情况下

小提琴

http://jsfiddle.net/k6sx2313/2/

修改

为什么这不会一个接一个地返回所有行, http://jsfiddle.net/k6sx2313/10/

4 个答案:

答案 0 :(得分:3)

假设您在数组中获取id(idArray),执行for循环并使用相应的data-empid隐藏每个元素:

var idArray = ['A123','B456'];
for (var i=0;i<idArray.length;i++) {
   var id = idArray[i];
   $("#eTable tr[data-empid=" + id + "]").hide();
}

答案 1 :(得分:1)

使用filter()过滤data-empid元素,并使用indexOf()检查数组中是否存在每个值

var arr = ['A123', 'B456']
$("#eTable tr[data-empid]").filter(function () {
    return arr.indexOf($(this).attr('data-empid')) != -1;
}).hide();

<强> demo

答案 2 :(得分:0)

属性选择器一次只能处理一个值,因此您需要使用两个选择器,用逗号分隔:

$("#eTable tr[data-empid='A123'], #eTable tr[data-empid='B456']").hide();

如果您是以编程方式查找值,可以将它们放在使用filter()的数组中:

var values = [ 'A123', 'B456' ];
$('#eTable tr').filter(function() {
    return $.inArray($(this).data('empid'), values) != -1;
}).hide();

Example fiddle

答案 3 :(得分:0)

试试这个:

&#13;
&#13;
var getFromWebServices = ['A123', 'B456'];
$("#eTable tr[data-empid=" + getFromWebServices.join("], #eTable tr[data-empid=") + "]").hide();
&#13;
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<table id="eTable">
  <tr data-empid="A123" data-salary="120" data-status="drone">
    <td>Peter</td><td>Vogel</td><td>Principal</td>
  </tr>
  <tr data-empid="B456" data-salary="130" data-status="worker">
    <td>Jan</td><td>Vogel</td><td>General Manager</td>
  </tr>
  <tr data-empid="C789" data-salary="110" data-status="worker">
    <td>Jason</td><td>van de Velde</td><td>Company nurse</td>
  </tr>
</table>
&#13;
&#13;
&#13;