So finden Sie mit Javascript, wenn das Element in DOM existiert oder es virtuell ist (wurde gerade von createElement erstellt)

8

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.

    
mpontus 27.04.2010, 05:47
quelle

6 Antworten

13

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.

    
csuwldcat 29.05.2013, 17:14
quelle
14

Mach das:

%Vor%     
DexterW 27.04.2010 05:57
quelle
1

Am sichersten ist es, direkt zu testen, ob das Element im Dokument enthalten ist:

%Vor%     
Tim Down 27.04.2010 08:43
quelle
1

Sie können auch jQuery.contains verwenden:

%Vor%     
nitinkhuranas 09.08.2017 06:14
quelle
-1

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.

    
Jeffery To 27.04.2010 09:56
quelle
-1
%Vor%     
Sahan 23.09.2017 06:19
quelle