JQuery:返回TBODY html,除了没有class = hidden的行

时间:2015-12-16 12:51:28

标签: jquery jquery-selectors

我有一个表格,例如如下:

<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&lt;&gt; hidden)。

我试过了:

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

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

4 个答案:

答案 0 :(得分:2)

我想如果你想要html(而不仅仅是一组匹配的dom对象),你可能需要克隆原始文件。像这样的东西

&#13;
&#13;
x=$('#rptBody').clone();
x.find('.hidden').remove();
alert(x.html());
&#13;
<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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您应该使用过滤器然后克隆。由于过滤器的负载较少,因此克隆整个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>

答案 2 :(得分:0)

理解这一点很重要,那么你想做什么:)

$(&#39; #rptBody tr:not(.hidden)&#39;)

返回jQuery对象数组。

答案 3 :(得分:0)

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

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