JavaScript:获取当前正在执行的<script>节点?</script>

时间:2010-06-02 03:24:08

标签: javascript dom

我需要知道是否有可能获得当前的执行节点?

示例:

..html
<script id="x">
  console.log(document.currentNode.id); // << this must return "x"
</script>
..html

谢谢!

5 个答案:

答案 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>