2009-02-09 8 views
1

Scénario: J'ai une page Web Javascript-produite que quelqu'un d'autre a écrit il ya longtemps que j'aimerais utiliser plutôt jQuery. Mon but est de nettoyer le html généré par Javascript que quelqu'un d'autre produit juste en utilisant quelques appels de jQuery contre ce HTML, après qu'il ait été généré.en utilisant jQuery après quelqu'un d'autre

Ce sera beaucoup plus simple que de modifier le Javascript de l'autre personne directement, au moins pour l'instant.

Ma première tentative consistait simplement à ajouter une balise de script à la fin de la tête HTML qui invoque le code jQuery souhaité.

<script src="/someone-elses-js-generator.js" /> 
    <script> 
    $(document).ready(function() { 
     alert('the other stuff ran, now do the jquery cleanup'); 
     $('.foobar').css("display","none"); 
     $('.doobar').css("display","inline"); 
     /// ... so on and so forth ... 
    }); 
    </script> 

Problème: Les travaux ci-dessus très bien, mais quand je commente le message « alerte ». La jquery n'effectue plus le nettoyage. Apparemment, ce qui se passe est que la boîte de msg d'alerte retardait l'exécution du code de nettoyage ultérieur, ce qui est génial, mais sans l'alerte, le jQuery semble fonctionner avant que l'autre javascript ait fini sa sortie.

Question: Y at-il un moyen d'obtenir le code de nettoyage jQuery pour exécuter après le code js-générateur, mais sans avoir à mettre une boîte d'alerte() là-dedans?

+0

Vous ne savez pas si cela peut vous aider, mais essayez d'utiliser une fenêtre plutôt qu'un document. les fenêtres onready sont appelées après les documents. – some

Répondre

1

Vous pouvez mettre le

$(document).ready(function() { ... }); 

A la fin de /someone-elses-js-generator.js ou à la fin de la logique de manipulation dans ce fichier.

1

Vous pouvez retarder votre code de nettoyage jusqu'à une certaine mesure en utilisant la fonction JavaScript suivante:

setTimeout('JS Cleanup Code', number_of_miliseconds); 
0

Vous pouvez également essayer d'appeler le code de nettoyage une seconde plus tard en utilisant setTimeout();

1

Je pense que vous devez probablement regarder pourquoi le code de l'autre codeur est retardé. S'il ne fonctionne pas immédiatement et qu'il n'y a aucune raison de ne pas pouvoir l'intégrer dans une fonction anonyme, exécutez-le immédiatement.

(function() { 
    /* 
    Other coder's code here 
    */ 
})(); //run this function and the code inside it immediately. 
5

Peut-être que $(document).ready() n'est pas la bonne solution.

Comment l'autre script est-il déclenché? Si c'est sur un window.onload alors il ne démarre probablement qu'après que votre jQuery a démarré.

Vous souhaitez attendre la fin de l'exécution de l'autre script. Probablement la meilleure façon de faire ceci est d'enrouler votre jQuery dans une fonction et de l'appeler à partir de l'autre script quand vous êtes sûr qu'il a fini.