我想知道是否有一種方法來獲取包含其中的腳本的DOM元素的句柄。所以,如果我有:引用腳本容器元素?
<script type="text/javascript> var x = ?; </script>
有,我可以將「X」爲包含「X」的劇本元素的引用的方法嗎?
我想知道是否有一種方法來獲取包含其中的腳本的DOM元素的句柄。所以,如果我有:引用腳本容器元素?
<script type="text/javascript> var x = ?; </script>
有,我可以將「X」爲包含「X」的劇本元素的引用的方法嗎?
你可以在腳本中包含元素一些標記文本,然後(類似於大衛說),你可以通過所有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);
}
沒有一個真正安全的方法。
最接近的是使用getElementsByTagName
來獲取所有腳本,獲取其長度,獲取最後一個腳本元素,然後從那裏開始工作。
如果腳本被延遲或腳本已被動態添加到另一個腳本元素之前的頁面,則可能會失敗。
什麼是你的實際問題試圖解決?例如,如果您認爲可以刪除'script'元素以從文檔中刪除該腳本,則這不起作用。腳本標記中的JavaScript一旦被執行,就會被加載到JavaScript運行時內存區域,並且不會受到對腳本標記的更改(包括完全刪除它)的影響。我相信還有其他的用途來獲得**做**的腳本標籤,只是提出問題...... :-) – 2010-10-08 13:48:30