JQuery:Return TBODY html 除了没有 class=hidden 的行

JQuery: Return TBODY html except for rows that don't have class=hidden

我有一个table例子如下:

<table>
 <thead>
   .....
 </thead>
 <tbody id="rptBody"> 
   <tr><td>Row 1</td></tr>
   <tr class="hidden"><td>Row 2</td></tr>
   <tr class="hidden"><td>Row 3</td></tr>
   <tr><td>Row 4</td></tr>
 </tbody>
</table>

我想将 $('#rptBody').html() 传递给另一个将打印所选行的函数(即 class <> 隐藏)。

我试过:

$('#rptBody tr:not(.hidden)').html()

但是 returns 只是第一个非隐藏行的列。如何过滤 tbody.html 以仅包含非隐藏行?

您应该使用 filter 然后克隆。由于过滤器具有较少的 load 然后克隆整个 html.

var matching = $('#rptBody tr').filter(function(){
                   return $(this).not('.hidden');
                });

alert(matching.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
 <thead>
 </thead>
 <tbody id="rptBody"> 
   <tr><td>Row 1</td></tr>
   <tr class="hidden"><td>Row 2</td></tr>
   <tr class="hidden"><td>Row 3</td></tr>
   <tr><td>Row 4</td></tr>
 </tbody>
</table>

我认为如果您想要 html(而不只是一组匹配的 dom 对象),您可能需要克隆原始对象。像这样

x=$('#rptBody').clone();
x.find('.hidden').remove();
alert(x.html());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
 <thead>
 </thead>
 <tbody id="rptBody"> 
   <tr><td>Row 1</td></tr>
   <tr class="hidden"><td>Row 2</td></tr>
   <tr class="hidden"><td>Row 3</td></tr>
   <tr><td>Row 4</td></tr>
 </tbody>
</table>

了解一下很重要,那你想做什么:)

$('#rptBody tr:not(.hidden)')

returns jQuery 对象数组。

$('#rptBody tr').each(function(){
    if ( $(this).hasClass('hidden') ) 
        {
            console.log( $(this).html() );
        }
    else 
        {
            console.log('Nope.');
        }
})

这将使您能够控制这两种情况:)。