Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 为什么';它不能把桌子移走吗?_Jquery_Ajax_Javascript - Fatal编程技术网

Jquery 为什么';它不能把桌子移走吗?

Jquery 为什么';它不能把桌子移走吗?,jquery,ajax,javascript,Jquery,Ajax,Javascript,我有这段代码 // 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();

我有这段代码

// 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;
});
当我想通过delete按钮删除表行时,它会触发(如图所示)

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

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

JS说tbody不是空的,google chrome则相反。我不知道如何修复它

它看起来像是
remove()
detach()
在移除tr元素后确实留下了某种积垢。它类似于空白或换行符,因此由于
:empty
选择器也会检查文本节点,因此它根本不是空的

所以

if($('#最新tbody').children().length()<1)
$(“#最新”).remove();
我们应该做到这一点

参考:

更新

与前面提到的Nick Craver一样,这种行为是由
HTML标记本身引起的

SomethingAnything?删除


例如,将使用
:empty

问题是,一旦删除它,像这样的相对选择器将不起任何作用,因为该元素不再具有父元素。也不起作用,因为它包含文本节点,:

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

所以
:如果有任何空白,空的
将不匹配(警报或日志
$(“最新tbody”).html())
以了解我的意思),这几乎是肯定的情况,下面的示例也是如此。相反,您可以使用来检查表行,并对其求反,如下所示:

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

,如果
:not(:has(tr))
选择器与任何内容都不匹配…如果没有少行
,它也不会删除任何内容。

是否检查$(this.closest('table')。find('tbody')。是否为(':empty')?可能是空的,如果没有执行条件。
哪种情况可能是空的。
为什么可能是空的?它看起来像是
remove()
本身创建了一个空格?@jAndy-在
.remove()
之前有一个空格…除非您的
元素相互重叠(没有新行字符),否则大多数页面都会每行呈现一行,保留至少一个
\n
在那里…删除不会删除此文本节点,只删除您告诉它的
:)我告诉它只是因为在测试中,我没有/没有解释为什么会这样。好的,我明白了。这确实是由于标记引起的。将所有内容串联在一起使用
:empty
。。真是一团糟@jAndy-是的,对于任何感兴趣的人,这里有一个比较
.children().length
(数量
)和
.contents().length
(所有孩子,什么
:空
检查):
$('.delete').live('click', function() {
    $(this).closest('tr').fadeOut('slow', function() {
        $(this).remove();
        $("#latest tbody:not(:has(tr))").parent().remove();
    });
    return false;
});