1

我想知道如何查询所有脚本标签并设置随机属性。我尝试过的不起作用:

document.getElementsByTagName("script")[0].setAttribute("data-foo", "bar");

它只匹配第一个脚本标签。(请不要使用 jQuery。我喜欢它,但不是现在。它还需要跨浏览器,因此querySelectorAll无法使用)。

编辑:

好的,事实证明,纯 JavaScript 查询选择器仅在加载时选择它们(正如 Kolink 指出的和系统解释的那样)。所以我必须在其他脚本标签之后添加设置属性的脚本。

4

2 回答 2

2

一种可能性是让您的其他脚本使用document.write.

document.write这是一个非常有用的经典案例。

// In main/powerhouse

// list of script sources
var scripts = ["script1.js", "script2.js", "script3.js"]

for (var i = 0; i < scripts.length; i++)
    document.write('<scr', 'ipt type="text/javascript" src="', scripts[i], '"></scr', 'ipt>');

现在脚本将在当前运行的脚本之后编写,并按预期同步加载。

于 2013-02-16T18:20:27.937 回答
1

你不能。

看,当“主”脚本运行时,其他脚本还不存在。

唯一的解决方案是使用onloadDOMContentLoaded事件推迟类型设置。

问题在于,在触发其他脚本时,其他脚本将被添加到页面并运行(大多数浏览器)或忽略(旧 IE)。在此阶段设置type它们没有任何效果。

因此,与其尝试寻找永远不会奏效的变通方法,为什么不首先尝试编写正确的 HTML 呢?

PS。您对它在 IE8 中不起作用的评论表明您处于 Quirks 模式。<!DOCTYPE>如果您还没有,请添加。

于 2013-02-16T18:15:23.167 回答