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;
});