1

すべてのスクリプト タグを照会し、ランダムな属性を設定する方法を知りたいです。私が試したことはうまくいきません:

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

最初のスクリプト タグのみに一致します。(jQuery は使用しないでください。気に入っていますが、今はそうではありません。また、クロスブラウザーである必要があるため、動作しquerySelectorAllません)。

編集:

さて、結局のところ、純粋な JavaScript クエリ セレクターは、ロードされたものだけを選択します (Kolink が指摘し、システムが説明したように)。そのため、他のスクリプト タグの後に属性を設定するスクリプトを追加する必要があります。

4

2 に答える 2

2

1 つの可能性は、他のスクリプトを を使用してページに動的に書き込むこと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

できません。

「メイン」スクリプトが実行されるとき、他のスクリプトはまだ存在していません。

onloadその唯一の解決策は、またはDOMContentLoadedイベントで型設定を延期することです。

これに関する問題は、他のスクリプトが起動するまでにページに追加され、実行 (ほとんどのブラウザー) または無視 (古い IE) されることです。typeこの段階で を設定しても効果はありません。

では、決してうまくいかない回避策を探す代わりに、そもそも適切な HTML を書いてみませんか?

PS。IE8 で動作しないというコメントは、Quirks Mode にいることを示唆しています。<!DOCTYPE>まだ持っていない場合は追加します。

于 2013-02-16T18:15:23.167 に答える