我需要知道是否有可能获取当前执行的节点?
例子:
例子:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
感谢!
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
感谢!
现代浏览器支持文档对象上的一个标准属性,该属性指向当前脚本节点:
https://developer.mozilla.org/zh-CN/docs/Web/API/Document/currentScript
<script id="x">
console.log(document.currentScript.id); // << this must return "x"
</script>
document.currentScript
实际上是 HTML5 的一部分:http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript。 - scribu我不能够百分之百地确定,但是使用document.getElementsByTagName('script')
返回的 script 标签集合不应包括当前执行的<script>
标签下面的脚本标签。换句话说,我认为这样做应该可行:
var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
这只对正在页面加载时执行的脚本有效。如果这个脚本是作为延迟脚本或页面加载事件的一部分执行,那么它很可能始终报告完全呈现页面中最后一个 <script>
。请注意,id标签不是 <script>
的有效属性,因此你的页面可能无法验证。如果你有任何编写脚本标记的外部脚本(例如第三方广告),我认为代码将是不可预测的。我在几年前尝试了这个想法,结果并不令人满意。
安德鲁的回答已经是一个好主意,但我遇到了所有提到的问题。这就是为什么我选择了一种不同的方法,在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
使用 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>
?
<script id="x">
console.log(document.getElementById("x").id);
</script>