2012-02-09 18 views
9

¿Cómo puedo saber en qué elemento se encuentra un elemento <script>?
Como ejemplo, tomemos este¿Cuál es el elemento actual en Javascript?

<div> 
<script type="text/javascript"> 
    var time = new Date(), hrs = time.getHours(), min = time.getMinutes(); 
    document.write('It is '+hrs+":"+(min<10?'0':'')+min); 
</script> 
</div> 

Entonces si quiero cambiar esto a algo más moderno, ¿cómo puedo averiguar qué elemento que estamos?
por lo que quiero escribir, por ejemplo, en jQuery

$(thisdiv).html('It is '+hrs+":"+(min<10?'0':'')+min); 

pero ¿cómo puedo obtener thisdiv?
Sí, lo sé, puedo poner una identificación, pero tengo la sensación de que no sería necesario. El navegador sabe dónde estamos, de lo contrario ni siquiera podría hacer el documento. ¡Escribe!

¿Entonces, sugerencias? Busqué, pero no pude encontrarlo. ¿Es tan simple que estoy pasando por alto lo obvio?

Respuesta

20

de secuencias de comandos se ejecutan en el orden en que aparecen en el documento. El contenido de una etiqueta de script se evalúa en el encuentro, por lo tanto, el último elemento <script> es siempre el actual.

Código:

<div> 
    <script> 
    var scriptTag = document.getElementsByTagName('script'); 
    scriptTag = scriptTag[scriptTag.length - 1]; 

    var parent = scriptTag.parentNode; 
    </script> 
</div> 
+0

+1, no puedo creer que haya pasado por alto ese concepto bastante fundamental :( – danjah

+0

+1, solución elegante. – osahyoun

+0

¡Gracias! No sabía que el último script fue el último de la lista, durante su ejecución, así que esta es la solución que estaba buscando. Y como ventaja, funciona en todos los navegadores en los que probé, incluso en Netscape 6. (Sí, soy completo así .) –

0
$('script#some_id').parent().html('blah blah'); 
+2

* Sí, lo sé, lo puede poner un ID en él, pero tengo la sensación de que no sería necesario. * –

+0

El señor Lister mencionó que no le había dado una identificación al guión, anteriormente en SO estaba buscando una solución similar porque tengo muchos sc ript els en un documento que requería un conocimiento de "dónde están", lo mejor que se me ocurrió fue establecer una var aleatoriamente única en el bloque de script para identificar el acceso dentro de otros scripts (http://stackoverflow.com/questions/3057628/cómo-identificarse a sí mismo-la-posición-de-una-secuencia de comandos-etiqueta-en-la-dom). Así que tal vez los identificadores sean el camino a seguir ... mirando ansiosamente su Q. – danjah

0

probar este

<div id="mydiv"> 
<script type="text/javascript"> 
    var time = new Date(), hrs = time.getHours(), min = time.getMinutes(); 
    document.getElementById('mydiv').innerHTML = 'It is '+hrs+":"+(min<10?'0':'')+min; 
</script> 
</div> 
+1

* Sí, lo sé, puedo ponerle una identificación, pero tengo la sensación de que no sería necesario. * –

+0

¡Oh, lo siento! Tengo esa declaración, creo que el Sr. Rob W está bastante cerca de su solución –

1

Firefox:

document.currentScript.parentElement 

Chrome:

document.scripts.length 
Cuestiones relacionadas