Ich suche nach einer Möglichkeit zu finden, ob in JavaScript referenziertes Element in das Dokument eingefügt wurde.
Lassen Sie uns einen Fall mit folgendem Code illustrieren:
%Vor%Jquery hat: einen sichtbaren Selektor, aber es liefert kein genaues Ergebnis, wenn ich feststellen muss, dass ein unsichtbares Element irgendwo im Dokument platziert wurde.
Hier ist eine einfachere Methode, die die standardmäßige Node.contains-DOM-API verwendet ein Element einzuchecken ist derzeit im DOM:
%Vor% CROSS-BROWSER HINWEIS : Das Document-Objekt in IE hat keine contains()
-Methode. Um die browserübergreifende Kompatibilität sicherzustellen, verwenden Sie stattdessen document.body.contains()
. (oder document.head.contains, wenn Sie nach Elementen wie Link, Skript usw. suchen)
Hinweise zur Verwendung einer bestimmten document
Referenz im Vergleich zur Knotenebene ownerDocument
:
Jemand hat die Idee aufgeworfen, MY_ELEMENT.ownerDocument.contains(MY_ELEMENT)
zu verwenden, um nach dem Vorhandensein eines Knotens im Dokument zu suchen. Während dieses das beabsichtigte Ergebnis hervorbringen kann (wenn auch in mehr als 99% der Fälle mehr Ausführlichkeit als nötig), kann es je nach Anwendungsfall auch zu unerwarteten Ergebnissen kommen. Lass uns darüber reden, warum:
Wenn Sie mit einem Knoten arbeiten, der sich derzeit in einem separaten Dokument befindet, z. B. einem mit document.implementation.createHTMLDocument()
, einem <iframe>
-Dokument oder einem HTML-Importdokument, und verwenden Sie die ownerDocument
-Eigenschaft des Knotens, um nach Anwesenheit zu suchen In dem, was du denkst wirst dein wichtigstes, visuell gerendertes document
sein, wirst du in einer Welt voller Schmerzen sein.
Die Knoteneigenschaft ownerDocument
ist einfach ein Zeiger auf das beliebige aktuelle Dokument, in dem sich der Knoten befindet. Fast jeder Anwendungsfall von contains
beinhaltet die Überprüfung eines spezifischen document
für die Anwesenheit eines Knotens. Sie haben 0 Garantie, dass ownerDocument
das gleiche Dokument ist, das Sie überprüfen möchten - nur Sie wissen das. Die Gefahr von ownerDocument
besteht darin, dass jemand eine beliebige Anzahl von Möglichkeiten zum Referenzieren, Importieren oder Generieren von Knoten in anderen Dokumenten einführen kann. Wenn dies der Fall ist und Sie Ihren Code so geschrieben haben, dass er sich auf die relative Inferenz von ownerDocument
stützt, kann Ihr Code brechen. Um sicherzustellen, dass Ihr Code immer zu den erwarteten Ergebnissen führt, sollten Sie nur mit speziell referenzierten document
vergleichen, die Sie überprüfen möchten, und nicht relativen Schlüssen wie ownerDocument
vertrauen.
Verwenden Sie compareDocumentPosition , um festzustellen, ob das Element in document
enthalten ist. PPK hat Browser-Kompatibilitätsdetails und John Resig hat eine Version für IE.
Tags und Links javascript document virtual element exists