Digamos que defino un elemento
$foo = $('#foo');
y luego llamo
$foo.remove()
de algún evento Mi pregunta es, ¿cómo verifico si $ foo se ha eliminado del DOM o no? Descubrí que $foo.is(':hidden')
funciona, pero eso también sería cierto si simplemente llamara $foo.hide()
.
$foo.closest(document.documentElement)
es más rápido (si a alguien le importa jsperf.com/jquery-element-in-dom )$.contains(document.documentElement, $foo.get(0))
es la forma más rápida.document.contains($foo[0])
¿Qué tal hacer esto?
fuente
Acabo de darme una respuesta mientras escribía mi pregunta: Llamar
Si
$f00
se ha eliminado del DOM, entonces$foo.parent().length === 0
. De lo contrario, su longitud será al menos 1.[Editar: Esto no es del todo correcto, porque un elemento eliminado aún puede tener un padre; por ejemplo, si elimina un
<ul>
, cada uno de sus hijos<li>
seguirá teniendo un padre. Utilice la respuesta de SLaks en su lugar.fuente
$foo
se haya eliminado del DOM. Si se eliminó con éxito, ya no tendrá un elemento padre. Por$foo.parent().length === 0
lo tanto, significa que la eliminación fue exitosa.Como no puedo responder como un comentario (supongo que el karma es demasiado bajo), aquí hay una respuesta completa. La forma más rápida es desenrollar fácilmente la comprobación de jQuery para el soporte del navegador y reducir al mínimo los factores constantes.
Como se ve también aquí: http://jsperf.com/jquery-element-in-dom/28 , el código se vería así:
Esto es semánticamente equivalente a jQuery.contains (document.documentElement, elt [0]).
fuente
Probablemente la forma más performativa es:
Esto también funciona con jQuery:
Fuente de MDN
fuente
Me gustó este enfoque. Sin jQuery y sin búsqueda DOM. Primero encuentre el padre principal (ancestro). Luego vea si ese es el documentElement.
fuente
en lugar de iterar padres, puede obtener el rect de límite que es todo ceros cuando el elemento se separa de dom
si desea manejar el caso de borde de un elemento de ancho y altura cero en la parte superior cero y cero izquierda, puede verificar dos veces iterando los padres hasta el documento.
fuente
display: none
no tiene límiteRect tampocoDe acuerdo con el comentario de Perro. También se puede hacer así:
fuente
fuente
¿Por qué no solo
if( $('#foo').length === 0)...
:?fuente
$foo
y verificar si la nueva consulta coincidía con algún elemento, parece una solución viable al problema en muchos escenarios. Puede ser incluso más rápido que algunas de las otras soluciones debido a cómo jQuery y los navegadores optimizan ciertos selectores (como por ID).fuente