为什么不删除表?

Rod*_*uza 6 javascript ajax jquery

我有这段代码

// TR Fading when deleted
$('.delete').live('click', function() {
    $.ajax({
    type: 'POST',
    url: 'history/delete/id/'+$(this).attr('id')
    });
    $(this).closest('tr').fadeOut('slow', function() {
        $(this).remove();
        if($(this).closest('table').find('tbody').is(':empty'))
            $('#latest').remove();
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

当我想通过删除按钮删除表格行时触发它(如图所示) 图像http://aviary.com/viewfull?fguid=433f68f6-d18d-102d-a9f3-0030488e168c&nowatermark=true

表可能会出现表行空白.我想在发生这种情况时删除整个表,但是表没有被删除.行代码$(this).remove();工作并且this似乎引用tr该范围中的元素,因为整行被删除但接下来的两行不起作用.该表未被删除.

编辑

我改变了if($(this).closest('table').find('tbody').is(':empty'))if(!$(this).closest('table').find('tbody').is(':empty'))(感叹号),看它是否删除,并删除它整个表,但我之前并删除最后一行之后检查表元素和得到这个

图片http://rookery9.aviary.com.s3.amazonaws.com/4344000/4344383_4fbd.png

JS表示,tbody不是空的,google chrome说不然.我不知道如何解决它

Nic*_*ver 2

问题是,一旦删除它,相对选择器就.closest()不会执行任何操作,因为该元素不再有父元素。也:empty不起作用,因为它包含来自文档的文本节点:

选择所有没有子元素的元素(包括文本节点)。

因此,:empty如果有任何空白,则不会匹配(警报或日志$("latest tbody").html())以了解我的意思),这几乎肯定是这种情况,我下面的示例也是如此。相反,您可以使用:has(tr)检查表行并:not()否定它,如下所示:

$('.delete').live('click', function() {
    $(this).closest('tr').fadeOut('slow', function() {
        $(this).remove();
        $("#latest tbody:not(:has(tr))").parent().remove();
    });
    return false;
});
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看快速演示,如果:not(:has(tr))选择器不匹配任何内容...并且如果没有 row-less 则不会<tbody>,它只是不会删除任何内容。