JavaScript:获取当前正在执行的<;脚本>;节点?

JavaScript:获取当前正在执行的<;脚本>;节点?,javascript,dom,Javascript,Dom,我需要知道是否可以获取当前执行节点 例如: ..html <script id="x"> console.log(document.currentNode.id); // << this must return "x" </script> ..html .html console.log(document.currentNode.id);// 我不能100%确定,但是文档返回的脚本标记集合。getElementsByTagName('script')不应

我需要知道是否可以获取当前执行节点

例如:

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

console.log(document.currentNode.id);// 我不能100%确定,但是
文档返回的脚本标记集合。getElementsByTagName('script')
不应该包括当前执行的
下面的脚本标记。换句话说,我认为这应该是可行的:

var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;

这仅适用于在页面加载时执行的脚本。如果在延迟脚本中或作为页面加载事件的一部分执行,则它可能总是报告完全呈现页面中的最后一个
。请注意,id标记不是
的有效属性,因此您的页面可能无法验证。如果您有任何编写脚本标记的外部脚本(例如,第三方广告),我认为代码将是不可预测的。几年前我就开始使用这个想法,结果并不令人满意。

现代浏览器支持指向当前脚本节点的文档对象的标准属性:


console.log(document.currentScript.id);// 为什么不使用:

<script id="x">
  console.log(document.getElementById("x").id);
</script>

console.log(document.getElementById(“x”).id);

Andrews Answer已经是一个好主意,但我经历了所有提到的问题。 这就是为什么我选择了一种不同的方法,它适用于IE、FF和Chrome

只需在图像的onload事件中执行脚本。定义一个透明的1像素gif内联,当它触发时,您将收到“this”

此示例用于在渲染时动态更改DIV内容。我的目标是使用由基于浏览器的xsl呈现(此处未显示)创建的不同innerHTML填充div

当然,您甚至可以从internet加载任何图像,因此它不能是内联的。最大的好处是:图像及其事件正在用新内容取代自身,因此即使图像也将消失。“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>

函数立即更改(元素,文本)
{
ele.parentNode.innerHTML=文本;
}

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>

变量id='占位符-'+Math.floor(Math.random()*1e10)
文件。写入(“”)
变量占位符=document.getElementById(id)
var script=placeholder.previousSibling
占位符.parentNode.removeChild(占位符)
//“bar”被写入文档
document.write(script.getAttribute('data-foo'))

我正在尝试替换document.write,用于延迟广告加载…
文档。currentScript
实际上是HTML5的一部分:Chrome也支持它(从v.29开始)。到目前为止,这是最好的答案这对异步脚本不起作用。@unscriptable,是的。我想我在回答中解释得很清楚。否?因为您没有ID名称开始-这是注入DOM内容的一个非常具体的问题非常酷而且更安全的方法来解决这个问题,太好了!
<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>