我想知道是否有办法处理包含其中脚本的DOM元素。如果我有:
<script type="text/javascript> var x = ?; </script>
有没有办法可以为“x”分配包含“x”的脚本元素的引用?
答案 0 :(得分:2)
没有一种真正安全的方式。
最接近的是使用getElementsByTagName
获取所有脚本,获取其长度,获取最后一个脚本元素,然后从那里开始工作。
如果延迟脚本或脚本已在另一个脚本元素之前动态添加到页面,则此操作可能会失败。
答案 1 :(得分:0)
您可以在脚本元素中包含一些标记文本,然后(类似于David所说的),您可以循环遍历DOM中的所有script
元素(使用getElementsByTagName
或您的任何功能图书馆,如果你正在使用它,可能有)。那应该可靠地找到元素。这看起来像这样(live example):
<body>
<script id='first' type='text/javascript'>
(function() {
var x = "MARKER:first";
})();
</script>
<script id='second' type='text/javascript'>
(function() {
var x = "MARKER:second";
})();
</script>
<script id='third' type='text/javascript'>
(function() {
var x = "MARKER:third";
})();
</script>
<script id='last' type='text/javascript'>
(function() {
var scripts, index, script;
scripts = document.getElementsByTagName("script");
for (index = 0; index < scripts.length; ++index) {
script = scripts[index];
if (script.innerHTML.indexOf("MARKER:second") >= 0
&& script.id !== "last") {
display("Found MARKER:second in script tag #" + script.id);
}
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
})();
</script>
</body>
请注意,与上面的脚本一样,如果您要从不同的脚本标记中查找脚本标记标记,则需要对其进行处理。上面是通过检查脚本标记的ID来处理的,但你也可以在你不想找到的那个中分解它,如下所示(live example):
if (script.innerHTML.indexOf("MARKER:" + "second") >= 0) {
display("Found MARKER:" + "second in script tag #" + script.id);
}