Comment pouvez-vous obtenir votre code d'attendre html() et append() fonctions à remplir?
Je suis dans le code html de l'élément de corps dans une iframe d'une chaîne de caractères str, alors je veux accéder à ce contenu sur la ligne suivante (ici, simplement à l'aide d'une alerte d'appel pour afficher le contenu), mais le html et ajouter des fonctions n'ai pas terminée au moment où l'alerte est appelée.
$(function(){
....
$("#notes-tab span.add_draft").bind("click", function(e){
var str = '';
$(this).parent().siblings(".tab-content").children(".para").each(function(ind) {
str += $(this).find('div:first').html();
});
var curr = $("#content_rte").contents().find("body").html();
if (curr == ' ' || curr == '<br>') {
$("#content_rte").contents().find("body").html(str);
}
else {
$("#content_rte").contents().find("body").append(str);
}
alert($("#content_rte").contents().find("body").html());
});
});
Et bien sûr, ni le html ni le ajouter les fonctions de rappels.
Quelqu'un pourrait-il me dire comment on accomplit normalement d'attente pour les DOM à être changé avant de poursuivre?
Est ce qu'on appelle de l'intérieur de votre $(document).prêt() la fonction?
OriginalL'auteur Craig | 2010-01-08
Vous devez vous connecter pour publier un commentaire.
Il n'y a vraiment pas de méthode directe pour l'attente autre que la fixation d'un arbitraire délai d'attente avant que vous essayez de récupérer le code HTML. Le code serait:
Vous devriez essayer et de faire le délai d'attente assez petit pour passer inaperçu, mais assez grand pour permettre le contenu de la mise à jour, de sorte que vous pourriez sortir avec beaucoup moins de 250ms.
Yep, terrible réponse, en dépit de cela peut fonctionner pour la plupart des cas. Qu'en conditions de course? (en.wikipedia.org/wiki/Race_condition)
Envisagez de api.jquery.com/load-event
OriginalL'auteur Corey Ballou
Si vous utilisez jQuery, vous pouvez compter sur
.la plus proche()
pour déterminer si l'élément que vous venez de créer est un parentbody
tag, et si il le fait, il signifie qu'il a été ajouté au DOM. Vous pouvez écrire une fonction telle que pour vous permettre de faire réellement quelque chose lors de votre élément est prêt:if (!$(selector).length) return;
" au début pour éviter les boucles infinies quand le sélecteur ne correspond à aucune des éléments.OriginalL'auteur Grancalavera
html
etappend
à la fois appeldomManip
, qui est une méthode synchrone, doncalert
ne devrait même pas exécuter jusqu'à ce que ces appels ont terminé.Êtes-vous sûr que les valeurs que vous attendez sont copiés dans les endroits que vous attendez?
Oui, bith l'ajout et l'html écrire avec succès, après l'alerte montre une vierge. Je ne savais pas ajouter retourné quoi que ce soit.
êtes-vous en mesure de poster un lien public vers votre page ou une version de la page qui reproduit le problème?
IFRAME manipulation est délicate, j'ai connu le même problème avant. Il vaut probablement un tout autre question à résoudre exactement pourquoi d'échec de la récupération (pertinent pour les IFRAMEs et la bibliothèque jQuery lui-même).
maintenant, je suis curieux! Je vois il y a eu quelques autres questions liées à jquery et des iframes (comme stackoverflow.com/questions/205087/...). Maintenant, pour trouver un peu de temps ...
OriginalL'auteur Jeff Sternal
Vous avez besoin d'attendre pour les dom charge de l'événement, de sorte que l'iframe a le temps de terminer le chargement:
il ne sera pas prêt, il serais charge prêt définit rendu complet des éléments du dom de la charge est à la fois des éléments du dom et de contenu, c'est ce dont ils ont besoin
OriginalL'auteur jjacka
vous devriez essayer de $(window).load(function()) plutôt que de document.prêt vous pouvez également toujours le feu de l'événement après votre ajoute. de cette façon, les événement(s) sera exécuté qu'une fois l'ajouter a réussi rendus.
la fenêtre.la charge ne fonctionne que une fois que le dom est chargé et ensuite tout le contenu dans les dom.
si cela ne fonctionne pas pour vous, alors vous pourriez toujours avoir un setTimeout() exécuter sur le document.prêt ou d'une fenêtre.charge et de mettre vos fonctions/événements là-bas et il va charger après un nombre de secondes.
vous pourriez essayer:
OriginalL'auteur Michael Stone
Vous devez utiliser
$( document ).ready( function( ){ } )
ou$( function( ){ } )
, mais avec de l'iframe est l'élément document.Pour ce faire, vous pouvez mettre votre script dans l'iframe HTML
Ou vous pouvez essayer de le faire sur le nouvellement ajouté iframe DOM élément lui-même, mais à partir de l'image parent. Ceci est différent de tous les navigateurs, mais l'exemple suivant DEVRAIT fonctionner.
Dites-moi si je me trompe, comme je l'ai dit, n'est-ce pas testé cette.
OriginalL'auteur Dan Beam
J'ai suivi le grancalavera's réponse, mais j'ai utilisé la longueur parce que mon sélecteur existe déjà dans le corps... donc:
OriginalL'auteur bocapio
Essayez d'utiliser .prêt(), qui est "un moyen d'exécuter du code JavaScript dès que la page du Modèle d'Objet de Document (DOM) devient fort à manipuler."
OriginalL'auteur Worst