2010-10-08 36 views
1

我想知道是否有一種方法來獲取包含其中的腳本的DOM元素的句柄。所以,如果我有:引用腳本容器元素?

<script type="text/javascript> var x = ?; </script> 

有,我可以將「X」爲包含「X」的劇本元素的引用的方法嗎?

+1

什麼是你的實際問題試圖解決?例如,如果您認爲可以刪除'script'元素以從文檔中刪除該腳本,則這不起作用。腳本標記中的JavaScript一旦被執行,就會被加載到JavaScript運行時內存區域,並且不會受到對腳本標記的更改(包括完全刪除它)的影響。我相信還有其他的用途來獲得**做**的腳本標籤,只是提出問題...... :-) – 2010-10-08 13:48:30

回答

0

你可以在腳本中包含元素一些標記文本,然後(類似於大衛說),你可以通過所有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); 
} 
2

沒有一個真正安全的方法。

最接近的是使用getElementsByTagName來獲取所有腳本,獲取其長度,獲取最後一個腳本元素,然後從那裏開始工作。

如果腳本被延遲或腳本已被動態添加到另一個腳本元素之前的頁面,則可能會失敗。