Angenommen, ich definiere ein Element
$foo = $('#foo');
und dann rufe ich an
$foo.remove()
von einem Ereignis. Meine Frage ist, wie überprüfe ich, ob $ foo aus dem DOM entfernt wurde oder nicht? Ich habe festgestellt, dass das $foo.is(':hidden')
funktioniert, aber das würde natürlich auch wahr sein, wenn ich nur anrufe $foo.hide()
.
$foo.closest(document.documentElement)
ist schneller (wenn es jemanden interessiert jsperf.com/jquery-element-in-dom )$.contains(document.documentElement, $foo.get(0))
als wäre dies der schnellste Weg.document.contains($foo[0])
Wie wäre es damit:
quelle
Ich habe gerade eine Antwort erhalten, als ich meine Frage tippte: Anruf
Wenn
$f00
aus dem DOM entfernt wurde, dann$foo.parent().length === 0
. Andernfalls beträgt seine Länge mindestens 1.[Bearbeiten: Dies ist nicht ganz korrekt, da ein entferntes Element noch ein übergeordnetes Element haben kann. Wenn Sie beispielsweise a entfernen
<ul>
, hat jedes seiner Kinder<li>
weiterhin ein Elternteil. Verwenden Sie stattdessen die Antwort von SLaks.quelle
$foo
es aus dem DOM entfernt wurde. Wenn es erfolgreich entfernt wurde, hat es kein übergeordnetes Element mehr. Dies$foo.parent().length === 0
bedeutet, dass die Entfernung erfolgreich war.Da ich nicht als Kommentar antworten kann (zu geringes Karma, denke ich), ist hier eine vollständige Antwort. Der schnellste Weg ist einfach, den jQuery-Check für die Browserunterstützung abzuwickeln und die konstanten Faktoren auf ein Minimum zu reduzieren.
Wie auch hier zu sehen - http://jsperf.com/jquery-element-in-dom/28 - würde der Code folgendermaßen aussehen:
Dies entspricht semantisch jQuery.contains (document.documentElement, elt [0]).
quelle
Der wahrscheinlich performativste Weg ist:
Dies funktioniert auch mit jQuery:
Quelle von MDN
quelle
Dieser Ansatz hat mir gefallen. Keine jQuery und keine DOM-Suche. Finden Sie zuerst den obersten Elternteil (Vorfahren). Überprüfen Sie dann, ob dies das documentElement ist.
quelle
Anstatt Eltern zu iterieren, können Sie einfach das Begrenzungsrecht erhalten, das alle Nullen sind, wenn das Element von dom getrennt wird
Wenn Sie den Randfall eines Elements mit der Breite und Höhe Null bei Null oben und Null links behandeln möchten, können Sie dies überprüfen, indem Sie die Eltern bis zum document.body iterieren
quelle
display: none
hat auch kein BoundingRectStimmen Sie Perros Kommentar zu. Es kann auch so gemacht werden:
quelle
quelle
Warum nicht einfach :
if( $('#foo').length === 0)...
?quelle
$foo
, scheint es in vielen Szenarien eine praktikable Lösung für das Problem zu sein, mit dem Selektor, der zum Erstellen verwendet wurde , erneut abzufragen und zu überprüfen, ob die erneute Abfrage mit einem Element übereinstimmt. Es kann sogar schneller sein als einige der anderen Lösungen, da sowohl jQuery als auch die Browser bestimmte Selektoren optimieren (z. B. nach ID).quelle