jquery - 为什么它不删除表?

标签 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();
        if($(this).closest('table').find('tbody').is(':empty'))
            $('#latest').remove();
    });
    return false;
});

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

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

编辑

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

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

JS 说 tbody 不为空,google chrome 则不然。不知道怎么解决

最佳答案

问题是一旦你删除它,像 .closest() 这样的相对选择器不会做任何事情,因为该元素不再有父元素。还有 :empty 不工作,因为它包含文本节点from the docs :

Select all elements that have no children (including text nodes).

所以 :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;
});

You can view a quick demo here , 如果 :not(:has(tr))选择器不匹配任何东西……如果没有无行 <tbody> 则它不会匹配,它只是不会删除任何内容。

关于jquery - 为什么它不删除表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3117280/

相关文章:

javascript - 父子组件是按什么顺序渲染的?

jQuery $.GET 参数传入 URL

javascript - jQuery:按类更新所有跨度标签并填充文本区域值?

javascript - jquery只选择第一个元素

javascript - 如何在php中使用ajax上传多张图片

javascript - .html 有效,但文本在 ajax 请求后不显示

javascript - 一次通过jquery调整多个图像的大小

javascript - 为什么我*只能*访问 setInterval 内的对象属性?

javascript - 如何将默认预览宽度设置为 Rickshaw.Graph.RangeSlider

php - 使用 php 多页更改 css 类