Wie können Sie Ihren Code warten, bis die Funktionen html () und append () abgeschlossen sind?

8

Ich setze die html des body-Elements in einem iframe auf eine string str, dann möchte ich auf den Inhalt in der nächsten Zeile zugreifen (hier nur mit einem Alert-Aufruf, um den Inhalt anzuzeigen), aber die html- und append-Funktionen zum Zeitpunkt des Aufrufs der Alert-Anweisung nicht abgeschlossen.

%Vor%

Und natürlich nehmen weder die HTML- noch die Append-Funktionen Callbacks entgegen.

Könnte mir jemand sagen, wie man normalerweise darauf wartet, dass das DOM geändert wird, bevor man fortfährt?

    
Craig 08.01.2010, 20:25
quelle

6 Antworten

11

Wenn Sie jQuery verwenden, können Sie sich auf .closest() verlassen, um herauszufinden, ob das soeben erstellte Element über ein Elternelement verfügt body tag, und wenn dies der Fall ist, bedeutet dies, dass es dem DOM hinzugefügt wurde. Sie können eine Funktion wie die folgende schreiben, damit Sie etwas tun können, wenn Ihr Element bereit ist:

%Vor%     
Grancalavera 09.10.2012 11:04
quelle
2

html und append beide rufen domManip auf, was eine synchrone Methode ist, daher sollte alert nicht einmal ausgeführt werden, bis diese Aufrufe abgeschlossen sind.

Sind Sie sicher, dass die erwarteten Werte in die erwarteten Orte kopiert werden?

    
Jeff Sternal 08.01.2010 20:52
quelle
1

Sie müssen auf das Ereignis dom load warten, damit der iframe Zeit hat, das Laden zu beenden:

%Vor%     
jjacka 08.01.2010 20:59
quelle
0

Sie sollten $ (window) .load (function ()) anstelle von document.ready versuchen. Sie könnten das Ereignis auch immer nach dem Anhängen auslösen. Auf diese Weise werden die Ereignisse erst ausgeführt, wenn der Anhang erfolgreich gerendert wurde.

Das window.load wird nur ausgeführt, wenn das dom geladen wurde und dann auch der gesamte Inhalt innerhalb des Doms.

Wenn das nicht für Sie funktioniert, dann könnten Sie immer ein setTimeout () auf dem document.ready oder window.load ausführen und Ihre Funktionen / Ereignisse dort einfügen und es wird nach einer bestimmten Anzahl von Sekunden geladen.

könntest du versuchen:

%Vor%     
Michael Stone 08.01.2010 20:33
quelle
0

Sie müssen $( document ).ready( function( ){ } ) oder $( function( ){ } ) verwenden, aber mit dem Dokumentelement dieses iframes.

Um dies zu tun, können Sie Ihr Skript in den HTML-Code des iframes einfügen.

%Vor%

Oder Sie können versuchen, es auf dem neu angehängten iframe-DOM-Element selbst, aber aus dem übergeordneten Frame zu tun. Dies ist in den verschiedenen Browsern unterschiedlich, aber das folgende Beispiel sollte funktionieren.

%Vor%

Sag mir, wenn ich falsch liege, wie ich schon sagte, habe ich das nicht getestet.

    
Dan Beam 09.01.2010 00:45
quelle
0

Ich folgte der grancalavera Antwort, aber ich benutzte die Länge, weil mein Selektor bereits im Körper existiert ... Also:

%Vor%     
bocapio 04.08.2015 00:00
quelle

Tags und Links