我需要知道是否有可能获得当前的执行节点?JavaScript:获取当前正在执行的<script>节点?
例子:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
谢谢!
我需要知道是否有可能获得当前的执行节点?JavaScript:获取当前正在执行的<script>节点?
例子:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
谢谢!
我不知道100%确定,但document.getElementsByTagName('script')
返回的脚本标记集合不应包含当前正在执行的脚本标记<script>
。换句话说,我认为这应该工作:
var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
这将仅适用于执行在网页加载脚本。如果这在延迟脚本中执行或作为页面加载事件的一部分执行,它可能会始终在完全呈现的页面中报告最后的<script>
。请注意,id标记不是<script>
的有效属性,因此您的网页可能无法验证。如果您有任何编写脚本标记的外部脚本(例如第三方广告),我认为代码将是不可预测的。几年前我玩过这个想法,结果并不令人满意。
这不适用于异步脚本。 – unscriptable 2013-12-18 16:46:34
@unscriptable,是的。我想我在我的回答中很清楚地解释了这一点。没有? – Andrew 2013-12-19 18:58:56
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>
'document.currentScript'实际上是HTML5的一部分:http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript – scribu 2013-07-29 18:20:28
Chrome也支持它(自v.29) – 2013-10-21 22:25:41
截至目前,这是最好的答案 – 2014-10-02 09:27:25
为什么不使用:
<script id="x">
console.log(document.getElementById("x").id);
</script>
因为您没有ID名称开头 - 这是与注入的DOM内容相当具体的问题 – Alex 2014-10-03 09:14:01
安卓答案已经有了好主意,但我经历提到的所有问题。 这就是为什么我选择了一种适用于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 海科
非常酷和更安全的方式来解决这个问题,伟大! – Alex 2014-10-03 09:15:13
使用文件撰写找到您的位置:
<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>
你会用什么这是为了? – 2010-06-02 03:25:29
我试图替换document.write,以推迟加载的广告... – 2010-06-02 03:36:21