我无法检查父母是否被删除

时间:2011-09-14 08:00:32

标签: jquery parent

我的代码很简单:

    $(this).parent().remove();
    if ($(this).parent())
    {
        alert( "exist" ); // alert always "exist"
    }

为什么 li 元素($(this).parent())已删除,但在此范围内提醒 - 不是吗?

8 个答案:

答案 0 :(得分:3)

jQuery构造函数总是返回一些东西。请改为$(this).parent().length

答案 1 :(得分:1)

您正在检查jQuery对象是否真实。所有Javascript对象都是真实的,因此将始终输入if语句。相反,你可以检查匹配元素的数量是否真实:

$(this).parent().remove();
if($(this).parent().length)
    alert( "exist" ); // alert "exist" if this still has a parent element.

答案 2 :(得分:0)

您删除了以前的父级,但现在又有了一个新的父级,第二次调用将返回$(this).parent()

答案 3 :(得分:0)

var parent = $(this).parent();
parent.remove();
if (parent.length) {
    alert('exists');
}

答案 4 :(得分:0)

也许if ($(this).parent().length > 0) {因为jQuery总是返回jQuery对象

答案 5 :(得分:0)

使用

$(this).parent().remove()

也会删除当前对象句柄$(this)(在这种情况下是父级的子对象)。因此,如果您正在检查$(this).parent(),它实际上并不存在。

要检查,您必须使用其他句柄

$parent=$(this).parent();
$(this).parent().remove();
if ($parent.size())
{
    alert( "exist" ); // alert always "exist"
}

答案 6 :(得分:0)

除了已经提到的jQuery对象的真实问题之外,主要问题是.remove()从DOM中移除了父级,但是在没有任何引用之前它不会销毁它。由于您引用了this,因此删除的对象仍然存在。实际上,整个对象层次结构可以从DOM中删除并且仍然存在。这与创建DOM对象时所处的状态相同,但尚未将它们插入到DOM中。

如果查看jQuery .remove()的源代码,它会调用removeChild()并销毁与该对象关联的所有jQuery状态,但不会破坏DOM对象本身。如果没有JS引用,它们最终会被垃圾收集器清理干净。

答案 7 :(得分:0)

remove()实际上并没有删除任何东西 - 它将它与HTML断开连接,并将其作为孤儿保留,并让javascript垃圾收集器找到它并丢弃它。

但是,由于你有变量this,垃圾收集器不会丢弃它,因为它正在使用中。

因此,您的代码会找到它。