2012-04-24 21 views
23

Tengo un problema similar al publicado here pero en lugar de obtener el ID principal, ¿cómo puedo obtener una referencia al script padre sin tener que codificar un id para la etiqueta script?Obtener una referencia al elemento padre <script>

Por ejemplo, tengo el siguiente código inyectado a un sitio web:

<div> 
    some other html tags 
    <script src="http://path_to_my_script.js"></script> 
</div> 

Lo que necesito es que en mi archivo path_to_my_script.js puedo obtener una referencia a la div exterior.

Hay una trampa y es que el código se copiará & pegado en varios lugares en la misma página web, lo que hace un identificador inútil.

¿Hay alguna posibilidad de hacerlo sin tener que codificar una identificación en todo el código?

Si la solución es con jQuery los mejores: D

Gracias de antemano.

+0

Sírvanse proporcionar más información/código de – Esailija

+1

¿Quieres evitar el uso de ID en la etiqueta script para asegurarse de que los navegadores antiguos Don' explotar? ¿O hay otra razón? – hradac

+0

@Esailija: Actualicé la publicación, espero que te ayude a ayudarme: D – diosney

Respuesta

38

Como se mencionó en What is the current element in Javascript?, la <script> elemento actual es también el último elemento <script>, en el momento de la ejecución.

La respuesta también se aplica a su caso, ya que la carga del script externo no se aplaza (a través del atributo async o defer).

var scriptTag = document.getElementsByTagName('script'); 
scriptTag = scriptTag[scriptTag.length - 1]; 
var parentTag = scriptTag.parentNode; 

La mayoría de los navegadores (incluso IE6) document.scripts apoyo. Firefox es compatible con este objeto a partir de la versión 9. Por lo tanto, el siguiente código también se puede utilizar:

var scriptTag = document.scripts[document.scripts.length - 1]; 
var parentTag = scriptTag.parentNode; 
+0

¡Impresionante! ¡Gracias! – diosney

+2

Lo mucho que quería que esta fuera la solución a mi problema, no fue así. El hecho es que mi aplicación realiza una gran cantidad de carga dinámica de javascript, pero la matriz 'document.scripts' solo contiene el primer y único archivo javascript que está realmente en el html. Todos los archivos js cargados posteriormente simplemente no están allí ... – RemyNL

1

Necesita una forma de remitir su script mediante. ¿De qué otra manera espera saber qué secuencia de comandos desea? Si solo tiene una secuencia de comandos, siempre puede hacer

var myScript = document.getElementsByTagName("script")[0]; 

para obtener un elemento DOM de la primera secuencia de comandos en su página. O usted podría utilizar jQuery y bucle a través de la secuencia de comandos para hacer algo con cada uno:

$("script").each(function() { 
    alert($(this).html()); 
}); 
3

Puede utilizar el selector de atributos para obtener una secuencia de comandos con una específica src, a continuación, parent('div') para saltar a su div elemento contenedor.

var parentDiv = $('script[src="path/to/script.js"]').parent('div'); 
+0

Gracias por su answser. El atributo fuente del script es el mismo para todo el código copiado y pegado en la página. Ver comentario a hradac. Actualizaré la pregunta para señalar esto. Gracias de todos modos por su tiempo. – diosney

+0

Bueno, obviamente no va a cargar el mismo script varias veces en una sola página, por lo que podría simplemente construir la ruta del script dinámicamente en una variable e inmediatamente insertarla en la cadena del selector. – Aaron

Cuestiones relacionadas