如果任何'td'没有给定文本,则删除所有'tr'

时间:2012-02-24 07:19:41

标签: javascript jquery

我有一个包含很多行的表。第一行是标题。

如果任何行没有给定文本,我想删除所有行。

<tr>
     <td id="1" class="links">Madia</td>
     <td id="" class="edit_client" >Press</td>
</tr>
<tr>
    <td id="2" class="td_link" >Nagara </td>
    <td class="td_link" id="11" class="edit_client">KR Pura</td>
</tr>

我想删除所有的tr,如果它的任何td没有给出文字说“me hussy”。

 $('tr').each(function () { 

 });

我不希望删除第一行,因为它的标题。所以功能应该从第二行开始检查。

5 个答案:

答案 0 :(得分:4)

尝试这样做

$('table tr:gt(0)').each(function() {
   if ($('td:contains("me hussy")', this).length == 0) $(this).remove();
});​

Demo on jsFiddle.net

修改

感谢mesiesta :gt(0)

修改

关于OP的评论

var name = "me hussy";
$('table tr:gt(0)').each(function() {
   if ($('td:contains("'+ name +'")', this).length == 0) $(this).remove();
});​

答案 1 :(得分:3)

var name="me hussy";
$('tr').not(':first').not($('tr').find('td:contains('+name+')').parent()).remove()

答案 2 :(得分:3)

试试这个

$('tr:not(:contains("me hussy")):not(:first)').remove();

答案 3 :(得分:0)

您应该使用theadtbody来分隔行,但这应该有效;

$(function() {
    var $table = $('table#byID');
    var $bodyRows = $table.find('tr').not(':first'); // Exclude the first row
    var hasEmptyTds = $bodyRows.find('td').filter(function() { // Filter by text, could also use the :contains selector
        return ($(this).text() != 'me hussy')
    }).length > 0;

    if (hasEmptyTds) {
        $bodyRows.remove(); // Remove all table body rows
    }
});

答案 4 :(得分:0)

如果需要重新使用该功能,请将其包装在函数中,否则您只需替换下面jQuery行中的mustMatchString即可。要删除第一个项目,请使用jQuery .slice方法。

function runRemoval(mustMatchString) {
   jQuery('tr').slice(1).each(function() {
       if(!jQuery('td:contains("' + mustMatchString + '")', this).length) {
           jQuery(this).remove();
       }

   });
}

runRemoval('me hussy')​;

http://jsfiddle.net/steveukx/D6Hkh/