我需要知道是否有可能獲得當前的執行節點?JavaScript:獲取當前正在執行的<script>節點?
例子:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
謝謝!
我需要知道是否有可能獲得當前的執行節點?JavaScript:獲取當前正在執行的<script>節點?
例子:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
謝謝!
我不知道100%確定,但document.getElementsByTagName('script')
返回的腳本標記集合不應包含當前正在執行的腳本標記<script>
。換句話說,我認爲這應該工作:
var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
這將僅適用於執行在網頁加載腳本。如果這在延遲腳本中執行或作爲頁面加載事件的一部分執行,它可能會始終在完全呈現的頁面中報告最後的<script>
。請注意,id標記不是<script>
的有效屬性,因此您的網頁可能無法驗證。如果您有任何編寫腳本標記的外部腳本(例如第三方廣告),我認爲代碼將是不可預測的。幾年前我玩過這個想法,結果並不令人滿意。
這不適用於異步腳本。 – unscriptable 2013-12-18 16:46:34
@unscriptable,是的。我想我在我的回答中很清楚地解釋了這一點。沒有? – Andrew 2013-12-19 18:58:56
Gecko(Firefox)支持指向當前腳本節點的文檔對象上的非標準屬性。你可能想在查看上面的答案之前檢查一下。
https://developer.mozilla.org/en-US/docs/DOM/document.currentScript
<script id="x">
console.log(document.currentScript.id); // << this must return "x"
</script>
'document.currentScript'實際上是HTML5的一部分:http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#dom-document-currentscript – scribu 2013-07-29 18:20:28
Chrome也支持它(自v.29) – 2013-10-21 22:25:41
截至目前,這是最好的答案 – 2014-10-02 09:27:25
爲什麼不使用:
<script id="x">
console.log(document.getElementById("x").id);
</script>
因爲您沒有ID名稱開頭 - 這是與注入的DOM內容相當具體的問題 – Alex 2014-10-03 09:14:01
安卓答案已經有了好主意,但我經歷提到的所有問題。 這就是爲什麼我選擇了一種適用於IE,FF和Chrome的不同方法。
只需在圖像的onload事件中執行腳本即可。內聯定義一個透明的1像素gif,當它觸發時你會收到「this」。
本示例用於在呈現時動態更改DIV內容。我的目標是用基於瀏覽器的xsl渲染(此處未顯示)創建的不同innerHTML填充div。
當然,您甚至可以從互聯網加載任何圖像,因此它不能內聯。最大的好處是:圖像和事件正在用新內容取代自己,所以即使圖像也會消失。 「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>
BR 海科
非常酷和更安全的方式來解決這個問題,偉大! – Alex 2014-10-03 09:15:13
使用文件撰寫找到您的位置:
<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>
你會用什麼這是爲了? – 2010-06-02 03:25:29
我試圖替換document.write,以推遲加載的廣告... – 2010-06-02 03:36:21