javascript - ¿por qué .load() de jQuery ignora <script>?
Tengo una página muy común a.html que se ve así:
<html>
<head>
<script type="text/javascript" src="xyz.js" > </script>
</head>
<body>
<div> ... </div>
</body>
</html>
En b.html, utilizo la función .load() de jQuery en un div.
$("#myDiv").load("a.html")
Funciona. El contenido de xyz.js se carga junto con a.html. Pero, ¿por qué no hay una etiqueta <script>? Abro Firebug para ver el código fuente. Hay a's pero no el <script> de a's.
Quiero el <script> porque lo necesito para encontrar la ruta relativa. (esta pregunta)
Editar: Intenté usar .get() y .html(). No ayudó.
Edit2: El título no es muy apropiado. El xyz.js se ejecuta. Pero no hay <script>.
Respuesta #1
La función .load() elimina intencionalmente las etiquetas <script> del contenido cargado. Cuando le das una URL simple para cargar, ejecutará los scripts después de cargar el contenido y agregarlo al DOM. Sin embargo, si usas el truco de agregar un selector después de la URL en el primer argumento:
$('#foo').load("http://some.domain.com/blah #special-div");
luego elimina las etiquetas <script> pero no las ejecuta.
¿Por qué? No lo sé.
Ahora, tenga en cuenta que cargar una página completa desde la etiqueta <html> hacia abajo dentro de un elemento de otra página va a resultar en algún tipo de monstruo de Frankenstein del DOM, si es que un navegador lo permite. Generalmente, cuando usa ".load()" para obtener fragmentos de contenido para actualizar una página, su servidor debería responder con una parte de una página, no con la página completa. La función de jQuery que permite un selector después de la URL real está destinada a permitirle extraer un fragmento de una página, lo cual es realmente genial, pero tiene el inconveniente de que los scripts no se ejecutarán en ese caso.
Respuesta #2
Porque no puede ejecutar el script dentro de la etiqueta <SCRIPT>. jQuery tiene .getScript() para llamar solo a scripts. Mira aquí
