En el pasado, he usado $ (window) .onload para ejecutar un bloque de código después de que se hayan cargado otros scripts. En este caso, no tengo la capacidad de cambiar el orden de carga de los archivos JS y el código que me interesa necesita manipular los nodos DOM que se insertan dinámicamente por otro archivo JS que se carga más abajo en la página. Ambos scripts se encuentran cerca de la parte inferior del documento. ¿Alguien tiene alguna sugerencia para este escenario?Ejecutar jQuery después de que todos los demás JS hayan ejecutado
Respuesta
Si la otra secuencia de comandos se ejecuta completamente en un evento de carga, puede agregar un controlador al mismo evento y poner su código en una llamada setTimeout
(con un retraso de 1
), lo que obligará a su código a ejecutarse durante la próxima descanso.
Si sabe qué elementos esperar, puede usar setInterval
para sondear el DOM para ver cuándo se insertaron. Por ejemplo, se trata de cómo se puede sondear para un elemento con ID foo
:
$(window).load(function()
{
var i = setInterval(function()
{
if ($('#foo').length)
{
clearInterval(i);
// safe to execute your code here
}
}, 100);
});
Para tales funciones, es mucho más eficiente usar document.getElementById ('foo'). – RobG
Es cierto que 'document.getElementById' es más eficiente, pero, una vez más, jQuery no se usa para su rendimiento sin procesar. También está optimizado para este tipo de selector simple. Más al punto: no habrá una diferencia perceptible entre los dos, ya que esta función se ejecutará a una velocidad relativamente lenta y fija. –
Solución brillante. – Christian
A pesar de que no se puede cambiar el orden de carga, se puede cambiar la forma en que se carga?
Una cosa que he utilizado en el pasado cuando quería cargar algunos javascript y ejecutar algún código después yo estaba seguro de que había terminado de cargar es de jQuery $ .getScript:
$.getScript('javascripttoload.js', function() {
//do the DOM manipulation you were talking about...
});
Si necesita adjuntar un controlador de eventos a futuros nodos DOM, puede usar jQuery .live(); de lo contrario, puede usar el complemento livequery.
ejemplo:
$(".nodes").livequery(function() {
// do something with the nodes
}
que se llame a la función anónima suministrado para todos los nodos actuales y futuras con la clase .nodes
El problema estaba tratando de declarar una variable para almacenar el objeto jQuery antes del objeto estaba en la página. Mover esas declaraciones dentro de un bloque de código que solo se ejecutó después de un evento de clic que solo se enlazó después de $ (ventana) .load resolvió el problema.
¡Gracias a todos por los consejos, sin embargo!
- 1. Cómo ejecutar código después de que se hayan manejado todos los demás eventos
- 2. ¿Tengo que borrar setTimeouts después de que se hayan ejecutado?
- 3. ¿Cómo puedo ejecutar un comando solo después de que otros comandos se hayan ejecutado correctamente?
- 4. Cómo ejecutar una función jQuery después de ejecutar todos y cada uno de los javascript
- 5. SenTestKit: ¿limpieza después de que se hayan ejecutado TODAS las pruebas?
- 6. Proyecto de varios módulos de Maven: cómo ejecutar una operación después de que todos los submódulos hayan terminado
- 7. Llamando a un método Después de que todos los SpringBeans y ApplicationContext se hayan inicializado
- 8. ¿Hay alguna manera de ver el origen de una página web DESPUÉS de ejecutar todos los scripts de jquery?
- 9. Verificar que todos los campos de entrada se hayan completado con jQuery
- 10. Ejecutar la función después de que todas las solicitudes ajax .load() hayan finalizado
- 11. Python "Todos los demás elementos" Idiom
- 12. ¿Se ha cargado $ .ready antes o después de que se hayan cargado todos los <script> en línea?
- 13. Jenkins: trabajo desencadenante después de que se hayan completado todos los trabajos posteriores, no solo los inmediatos
- 14. forzando a un bloque jQuery listo para ejecutarse después de todos los otros bloques listos
- 15. ¿Cómo pongo en pausa main() hasta que todos los demás hilos han muerto?
- 16. Ejecutar código jQuery después de aplicar todas las reglas CSS
- 17. Selección de todos los demás nodos XPath uing
- 18. ¿Cómo llamar la alerta después de que se hayan realizado todas las solicitudes de Ajax?
- 19. la forma de ejecutar una pieza de código sólo después de que todos los temas están hecho
- 20. jQuery Espere hasta que las llamadas async ajax hayan finalizado
- 21. ¿Cómo hacer una pantalla completa div y encima de todos los demás elementos con jQuery?
- 22. jquery seleccionar todos los hijos después de nth-child
- 23. WPF Ventana modal usando ShowDialog() Bloquea todos los demás Windows
- 24. jQuery, JavaScript, HTML: cómo cargar imágenes después de que todo lo demás se carga?
- 25. jquery - Seleccionar todos los elementos después de cierto elemento
- 26. Reemplazar todos los demás a continuación, primera aparición en PHP
- 27. Verifica que se hayan alcanzado los límites de YQL.
- 28. Ocultar todos los elementos que vienen después del enésimo elemento
- 29. Renombrar tablas/columnas/filas SQLite después de que se hayan creado los índices
- 30. clase añadir a todos los enlaces que enlazan con un determinado dominio con js (jquery)
¿Cómo ** exactamente ** se está ejecutando el otro script? ¿Utiliza AJAX? – SLaks