JQuery hat gerade ein leeres div erstellt und hat kein Dokumentfragment als übergeordnetes Element

8

Beim Erstellen eines neuen HTML-Knotens in jQuery mit

%Vor%

wird nicht Teil von DOM, bis Sie es anhängen. Dies bedeutet jedoch nicht, dass der Knoten kein Elternteil hat.

Wenn der Knoten leer erstellt wurde, z. B .:

%Vor%

Sie können das übergeordnete Element überprüfen:

%Vor%

und sehen Sie sich

%Vor%

als Ergebnis. DocumentFragment ist ein ähnliches Objekt wie document , jedoch kein Teil der DOM-Struktur.

Das seltsame Ding kommt jetzt. Wenn Sie einen leeren Knoten erstellen, wie

%Vor%

und versuchen Sie, seinen Inhalt zu überprüfen

%Vor%

überraschend erhalten Sie

%Vor%

Ich kann dieses Verhalten nicht verstehen und habe in der jQuery-Dokumentation nichts dazu gefunden. Ich habe es beim Debuggen gefunden, warum JavaScriptMVC mxui modal auf einem leeren div fehlgeschlagen ist.

Ich habe dieses Verhalten sowohl in Chromium als auch in Opera getestet, es scheint also kein browserbezogenes Problem zu sein.

Hat jemand eine Erklärung dafür?

    
Samuel Hapak 29.04.2012, 12:52
quelle

2 Antworten

12

Das liegt daran, dass jQuery document.createElement für "schnelle" HTML-Strings verwendet, aber jQuery.buildFragment für alle anderen (mehr "komplexen") HTML-Strings. <div></div> wird als schnell betrachtet, <div>a</div> dagegen nicht.

Ich stelle eine Geige auf, damit du nachsehen kannst: Ссылка .

"Schnell" ist definiert mit dem regulären Ausdruck:

%Vor%

, die die leere div-Zeichenkette, aber nicht die nicht leere div-Zeichenkette übergibt. Beachten Sie den if / else -Block nach der Überprüfung, die dafür sorgt die zwei Zweige.

Das liegt also hauptsächlich daran, dass jQuery explizit ein Dokumentfragment mit dem nicht leeren div erstellt, während es nicht mit dem leeren div arbeitet (es verwendet stattdessen nur document.createElement("div") ).

    
pimvdb 29.04.2012, 15:32
quelle
1

Hier kann target ein beliebiger gültiger jQuery-Selektor sein.

only $('<div></div>') erstellt keinen Knoten für Ihr DOM. Es erstellt es nur virtuell, aber nicht im Dokument. Um es in Ihr DOM einzubetten, müssen Sie eine Methode wie append(), appendTo(), insert() usw. verwenden.

%Vor%

Hier setze ich div mit der Klasse latest ein und lade nach dem Anhängen den übergeordneten Knoten mit parent() method ab.

    
thecodeparadox 29.04.2012 13:17
quelle

Tags und Links