JQuery - 在jquery中按属性过滤元素

时间:2016-09-16 21:00:52

标签: jquery

我正在尝试将所有可见行的数据类型值推送到数组中,如何使用jquery执行此操作?

我做了类似的事情,但我很确定它不正确,因为它不起作用。

var myArray = [];

            $('#myTableId tbody tr').each(function() {
                myArray.push($(this).not('.class="hidden"').data('type'));
            });

3 个答案:

答案 0 :(得分:4)

使用map()并在循环前使用not()

var myArray =  $('#myTableId tbody tr').not('.hidden').map(function(){
   return $(this).data('type')
}).get();

您也可以对$.each执行相同操作... not()将保持不变

答案 1 :(得分:1)

As per my comment,您使用的选择器不正确。在.hidden方法中使用.not()就足够了,即:

var myArray = [];

 $('#myTableId tbody tr').each(function() {
      var t = $(this).not('.hidden').data('type');
      if(!!t)
          myArray.push(t);
});

这是一个概念验证示例:



$(function(){
var myArray = [];
    
    $('#myTableId tbody tr').each(function() {
      var t = $(this).not('.hidden').data('type');
      if(!!t)
        myArray.push(t);
    });

  console.log(myArray);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<table id="myTableId">
  <tbody>
    <tr data-type="lorem"><td>lorem (not .hidden)</td></tr>
     <tr class="hidden" data-type="ipsum"><td>ipsum (.hidden)</td></tr>
     <tr data-type="dolor"><td>dolor (not .hidden)</td></tr>
    </tbody>
  </table>
&#13;
&#13;
&#13;

这假设你的标记也是正确的。

答案 2 :(得分:1)

您可以使用hasClass功能,如下所示:

var myArray = [];

$(document).ready(function() {
   $('#myTableId tr').each( function() {
     if (! $(this).hasClass('hidden'))
        myArray.push($(this).data('type'));
   });
});

DEMO