2011-07-15 13 views
11

Sé que usted puede comprobar si existe un elemento con $('div').length, pero cuando un elemento se destruye utilizando .remove(), .length todavía informes existe el div. ¿Cómo puedo saber si realmente existe o no?JQuery: Comprobar si existe el elemento junto a '.Remove()'

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

Err .. No estoy muy seguro de lo que quiere decir. Si usa '.remove()', el elemento se elimina del DOM. Longitud informa el resultado esperado: http://jsfiddle.net/TmPBC/ –

+0

Eso alertará sí, siempre y cuando haya un div en la página. Puede usar una identificación para probar si se ha eliminado un elemento exacto. – Paulpro

+0

$ ('div') fue un ejemplo. No estaba probando para ver si había divs en toda la página. – gavsiu

Respuesta

6

prueba si tiene un padre:

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

o si tiene una referencia al elemento DOM:

if(element.parentNode) { 
    // yes 
} 

Obviamente, esto sólo funciona para los elementos que ya tienen una referencia a.

FWIW, el elemento en sí aún existe, simplemente no es parte del árbol DOM.

+0

Esto no funcionará si se eliminó cualquier elemento padre de '$ element' del DOM. Por ejemplo, '$ element.parent(). Remove()'. '$ element.parent(). length' sigue siendo 1, aunque' $ element' no está en el árbol DOM. – gilly3

+0

@ gilly3: Bueno, supongo que '.remove()' se realizó en el elemento, como se menciona en la pregunta. De todos modos, +1 de su solución, pero creo que es suficiente buscar 'body' en lugar de' html'. –

6

¿Por existir, quieres decir que quieres ver si existe en el dom? Comprobar para ver si "html" es un antepasado:

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

O utilice .is("html *"). Devuelve un valor lógico, lo cual es práctico:

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

¿Cuál es el más eficiente en términos de rendimiento? Hmm. – jfroom

+0

Si hay una diferencia, '.closest()' sería más eficiente. Dependiendo de cómo se implemente '.is()', podría ser casi tan eficiente como '.closest()', o podría ser mucho peor. – gilly3

0

se puede obtener la matriz del elemento antes de retirar el elemento y después del elemento se ha eliminado se puede comprobar de esta manera!

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

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

por supuesto elemento sería algún selector de jQuery

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

Esto seguirá funcionando si uno de los padres del elemento fue eliminado (en cuyo caso el elemento en sí va a tener un padre).

Cito this answer.

Cuestiones relacionadas