variable - modificar dom javascript
JavaScript: obtener el nodo<script> de ejecuciĆ³n actual? (5)
Esta pregunta ya tiene una respuesta aquí:
Necesito saber si es posible obtener el nodo de ejecución actual?
Ejemplo:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
¡Gracias!
No sé con seguridad al 100%, pero la colección de etiquetas de script devueltas por document.getElementsByTagName(''script'')
no debe incluir las etiquetas de script que están debajo del <script>
actualmente en ejecución. En otras palabras, creo que esto debería funcionar:
var arrScripts = document.getElementsByTagName(''script'');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
Esto solo funcionará para las secuencias de comandos que se ejecutan a medida que se carga la página. Si esto se ejecuta en un script diferido o como parte de un evento de carga de página, es probable que siempre informe el último <script>
en la página completamente renderizada. Tenga en cuenta que la etiqueta id no es un atributo válido para <script>
, por lo que su página probablemente no valide. Si tiene scripts externos que escriben etiquetas de script (por ejemplo, anuncios de terceros), creo que el código será impredecible. Jugué con esta idea hace un par de años y los resultados fueron insatisfactorios.
Por qué no usar:
<script id="x">
console.log(document.getElementById("x").id);
</script>
La respuesta de Andrews ya fue una buena idea, pero experimenté todos los problemas mencionados. Es por eso que elegí un enfoque diferente que funciona bien para IE, FF y Chrome.
Simplemente ejecutando el script en un evento de carga de una imagen. Al definir un gif transparente de 1 píxel en línea, recibirás "esto" cuando se dispare.
Este ejemplo se usa para cambiar dinámicamente el contenido de DIV durante el procesamiento. Mi objetivo es llenar el div con un innerHTML diferente creado por un buscador basado en navegador xsl (no se muestra aquí).
Por supuesto, incluso puede cargar cualquier imagen de Internet, por lo que no debe estar en línea. Y el gran beneficio: la imagen y su evento se están reemplazando con el nuevo contenido, por lo que incluso la imagen desaparecerá. El "div" incluso no necesita ninguna asignación "id".
<div id="demo">
empty
<img onLoad="changeNodeOnTheFly(this,''hurra'');void(0);" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="/>
</div>
La secuencia de comandos:
<script>
function changeNodeOnTheFly(ele, text)
{
ele.parentNode.innerHTML=text;
}
</script>
BR Heiko
Use document.write para encontrar su posición:
<script data-foo="bar">
var id = ''placeholder-'' + Math.floor(Math.random() * 1e10)
document.write(''<div id='' + id + ''></div>'')
var placeholder = document.getElementById(id)
var script = placeholder.previousSibling
placeholder.parentNode.removeChild(placeholder)
// "bar" is written to the document
document.write(script.getAttribute(''data-foo''))
</script>
Gecko (Firefox) admite una propiedad no estándar en el objeto de documento que apunta al nodo de script actual. Es posible que desee comprobar esto antes de ir a la respuesta anterior.
https://developer.mozilla.org/en-US/docs/DOM/document.currentScript
<script id="x">
console.log(document.currentScript.id); // << this must return "x"
</script>