Disons que je définis un élément
$foo = $('#foo');
et puis j'appelle
$foo.remove()
d'un événement. Ma question est la suivante: comment vérifier si $ foo a été supprimé du DOM ou non? J'ai trouvé que cela $foo.is(':hidden')
fonctionne, mais cela reviendrait bien sûr aussi vrai si je appelais simplement $foo.hide()
.
$foo.closest(document.documentElement)
est plus rapide (si quelqu'un se soucie de jsperf.com/jquery-element-in-dom )$.contains(document.documentElement, $foo.get(0))
soit le moyen le plus rapide.document.contains($foo[0])
Que diriez-vous de faire ceci:
la source
Je viens de réaliser une réponse en tapant ma question: Appeler
Si
$f00
a été supprimé du DOM, alors$foo.parent().length === 0
. Sinon, sa longueur sera d'au moins 1.[Modifier: ce n'est pas tout à fait correct, car un élément supprimé peut toujours avoir un parent; par exemple, si vous supprimez a
<ul>
, chacun de ses enfants<li>
aura toujours un parent. Utilisez plutôt la réponse de SLaks.la source
$foo
été supprimé du DOM. S'il a été supprimé avec succès, il n'aura plus d'élément parent. Par conséquent$foo.parent().length === 0
, cela signifie que la suppression a réussi.Comme je suis incapable de répondre en tant que commentaire (karma trop faible je suppose), voici une réponse complète. Le moyen le plus rapide est de dérouler facilement la vérification jQuery de la prise en charge du navigateur et de réduire au minimum les facteurs constants.
Comme vu aussi ici - http://jsperf.com/jquery-element-in-dom/28 - le code ressemblerait à ceci:
Ceci est sémantiquement équivalent à jQuery.contains (document.documentElement, elt [0]).
la source
La méthode la plus performante est probablement:
Cela fonctionne également avec jQuery:
Source de MDN
la source
J'ai aimé cette approche. Pas de jQuery et pas de recherche DOM. Trouvez d'abord le parent supérieur (ancêtre). Ensuite, voyez si c'est le documentElement.
la source
au lieu d'itérer les parents, vous pouvez simplement obtenir le rectangle de délimitation qui est entièrement à zéro lorsque l'élément est détaché de dom
si vous souhaitez gérer la casse du bord d'un élément de largeur et de hauteur nulles à zéro en haut et à zéro à gauche, vous pouvez vérifier deux fois en itérant les parents jusqu'au document.
la source
display: none
n'a pas de rectangle de délimitation non plusD'accord avec le commentaire de Perro. Cela peut également être fait comme ceci:
la source
la source
Pourquoi pas simplement
if( $('#foo').length === 0)...
:?la source
$foo
et vérifier si la ré-requête correspond à un élément, semble une solution viable au problème dans de nombreux scénarios. Cela peut même être plus rapide que certaines des autres solutions en raison de la façon dont jQuery et les navigateurs optimisent certains sélecteurs (par exemple, par ID).la source