2011-07-15 48 views
11

我知道你可以检查一个元素是否存在与$('div').length,但是当一个元素被销毁时使用.remove().length仍然报告div存在。我怎样才能找到它是否真的存在?JQuery:检查元素是否存在在'.remove()'

if ($('div').length) { 
    alert('yes') 
} else { 
    alert('no') 
} 
+0

错误..不完全确定你的意思。如果使用'.remove()',则该元素将从DOM中移除。长度报告预期结果:http://jsfiddle.net/TmPBC/ –

+0

只要页面上有div,就会提示yes。您可以使用ID来测试是否删除了确切的元素。 – Paulpro

+0

$('div')就是一个例子。我没有测试整个页面是否有任何div。 – gavsiu

回答

6

测试它是否有父:

if ($element.parent().length) { alert('yes') } 
else { alert('no') } 

,或者如果你有到DOM元素的引用:

if(element.parentNode) { 
    // yes 
} 

显然,这只是为元素的作品,你已经有一个参考。

FWIW,元素本身仍然存在,它只是不是DOM树的一部分。

+0

如果任何'$ element'的父元素已经从DOM中删除,这将不起作用。例如,'$ element.parent()。remove()'。尽管'$ element'不在DOM树中,'$ element.parent()。length'仍然是1。 – gilly3

+0

@ gilly3:好的,我假设''.remove()'是在元素上执行的,正如问题中提到的那样。无论如何,你的解决方案+1,但我认为这是足够的,而不是'html'寻找'body'。 –

6

存在,你的意思是你想看看它是否存在于DOM?请检查是否 “HTML” 是一个祖先:

var $myDiv = $(".myDiv"); 
$myDiv.closest("html").length; // returns 1 
$myDiv.remove(); 
$myDiv.closest("html").length; // returns 0 

或者使用.is("html *")。它返回一个布尔值,这是很方便:

var $myDiv = $(".myDiv"); 
$myDiv.is("html *"); // returns true 
$myDiv.remove(); 
$myDiv.is("html *"); // returns false 
+0

哪一个在性能方面最有效率?嗯。 – jfroom

+0

如果完全不同,'.closest()'是最有效的。根据.is()如何实现,它可能与'.closest()'几乎一样高效,或者它可能会更糟糕。 – gilly3

0

你可以得到元素的父删除元素和元素已被删除后,可以检查像在此之前!

当然
var parent = $(element).parent(); 
    $(element).remove(); 

    if(parent.children(element)) { alert('yes'); } 
    else { alert('no'); } 

元素是一些jQuery选择

4
if (!$foo.closest('html').length) { 
    //Element is detached 
} 

如果该元素的父母一方,删除了此仍然可以工作(在这种情况下,元素本身仍然有一个父)。

我引用this answer