我需要知道是否有可能获得当前的执行节点?
示例:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
谢谢!
答案 0 :(得分:20)
我不知道100%肯定,但document.getElementsByTagName('script')
返回的脚本标记集合不应包含当前正在执行的<script>
下面的脚本标记。换句话说,我认为这应该有效:
var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
这仅适用于在页面加载时执行的脚本。如果这在延迟脚本中执行或作为页面加载事件的一部分执行,则它可能始终报告完全呈现页面中的最后<script>
。请注意,id标记不是<script>
的有效属性,因此您的网页可能无法验证。如果您有任何编写脚本标记的外部脚本(例如,第三方广告),我认为代码将是不可预测的。几年前我玩过这个想法,结果并不令人满意。
答案 1 :(得分:18)
Gecko(Firefox)支持文档对象上指向当前脚本节点的非标准属性。在进行上述回答之前,您可能需要检查一下。
https://developer.mozilla.org/en-US/docs/DOM/document.currentScript
<script id="x">
console.log(document.currentScript.id); // << this must return "x"
</script>
答案 2 :(得分:3)
安德鲁斯答案已经是一个好主意,但我遇到了提到的所有问题。 这就是为什么我选择了一种适用于IE,FF和Chrome的不同方法。
只需在图像的onload事件中执行脚本即可。定义一个透明的1像素gif内联,你会在它发射时收到“this”。
此示例用于在呈现时动态更改DIV内容。我的目标是用基于浏览器的xsl渲染(此处未显示)创建的不同innerHTML填充div。
当然,您甚至可以从互联网上加载任何图像,因此它不能内联。最大的好处是:图像及其事件正在用新内容取而代之,因此即使图像也会消失。 “div”甚至不需要任何“id”赋值。
<div id="demo">
empty
<img onLoad="changeNodeOnTheFly(this,'hurra');void(0);" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="/>
</div>
剧本:
<script>
function changeNodeOnTheFly(ele, text)
{
ele.parentNode.innerHTML=text;
}
</script>
BR 的Heiko
答案 3 :(得分:2)
使用document.write查找您的位置:
<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>
答案 4 :(得分:0)
为什么不使用:
<script id="x">
console.log(document.getElementById("x").id);
</script>