我的代码很简单:
$(this).parent().remove();
if ($(this).parent())
{
alert( "exist" ); // alert always "exist"
}
为什么 li 元素($(this).parent())已删除,但在此范围内提醒 - 不是吗?
答案 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
,垃圾收集器不会丢弃它,因为它正在使用中。
因此,您的代码会找到它。