2011-08-03 10 views
7

Tengo que escribir un script que va a utilizar document.write para producir una salida, pero necesito saber qué elemento está contenido, ejemplo:elemento DOM donde etiqueta script es

<p> 
    paragraph 1 
    <script src="test.js" type="text/javascript"></script> 
</p> 

Necesito obtener una referencia a la etiqueta p ...

gracias!

+1

cualquier llamada a document.write en test.js produciría su resultado en la ubicación exacta de la etiqueta del script. A menos que quiera insertar el texto ANTES del texto del 'párrafo 1 '... –

+0

Lo sé, pero necesito saber el contenido de la etiqueta p para escribir la salida ... – Gustav

+0

en jquery, algo así como' $ ("script [@ src = 'test.js'] "). parent ('p')' haría el truco. –

Respuesta

11

En la vez que se ejecuta la secuencia de comandos, el documento es sólo parcialmente cargado. Por lo tanto, su elemento de script sería el último nodo del documento:

var target = document.documentElement; // start at the root element 
while (target.childNodes.length && target.lastChild.nodeType == 1) { // find last HTMLElement child node 
    target = target.lastChild; 
} 
// target is now the script element 
alert(target.parentNode); // this is p 
+0

gracias! eso es lo que necesitaba – Gustav

+5

Esto no siempre es cierto, sin embargo, p. insertando un nuevo elemento '

-1

¿Por qué no poner simplemente un id en la etiqueta p relevante?

<p id="desiredTag"> 
    paragraph 1 
    <script src="test.js" type="text/javascript"></script> 
</p> 

A continuación, se puede hacer un getElementById("desiredTag") o $("#desiredTag").

+2

El contenido puede ser dinámico en el que no se puede agregar la id/clase al padre, de lo contrario, habría sido la solución más fácil. –

8

Ejemplo:http://jsfiddle.net/NqN3S/

<p> 
    paragraph 1 
    <script id="test" type="text/javascript"> 
     var scpt = document.getElementById("test"); 
     var p = scpt.parentNode; 
     p.removeChild(scpt); 
     alert("old content: " + p.innerHTML); 
     p.innerHTML = "some new content"; 
    </script> 
</p> 
Cuestiones relacionadas