2012-04-20 125 views
-1

我想要做這樣的事情:腳本刪除本身

<body> 
<script id="a" > 
//Here i do a lot of things, then 
document.body.removeChild(document.getElementById("a")); 
</script> 
</body> 

而且它不工作!

+1

定義「不工作」。你是否希望將腳本從視圖源中刪除? – 2012-04-20 07:28:36

+0

我不認爲你可以這樣做。爲什麼你想要刪除劇本呢?通過查看瀏覽器源代碼,它將仍然存在,因爲它將被渲染。從理論上講,它只會從內存中刪除,但再次,不知道你是否可以做到這一點,特別是從它本身。 – 2012-04-20 07:37:11

+1

如果您希望它從「查看頁面源」中消失:這是不可能的。但它會從DOM中移除。檢查螢火蟲或類似的工具,它適用於我。 – stewe 2012-04-20 07:53:13

回答

0

也許試圖從自己刪除腳本導致問題。也許這將工作...

<script id="a"> 
    var stuffFinished = false; 
    $(document).ready(function(){ 
     //do your stuff here 
     stuffFinished = true; 
    }); 
</script> 

<script id="b"> 
    $(document).ready(function(){ 
     var timer = setInterval(function() { 
     if (stuffFinished) { 
      $("#a").remove(); 
      clearTimeout(timer); 
     } 
     }, 1000); 
    }); 
</script> 

我沒有測試這一點,只是一個想法...

+0

你可以給我一個沒有jQuery的方法嗎? – user1342369 2012-04-20 09:47:40

+0

我可以告訴你如何。使用body標籤中的onload事件來觸發兩個方法,例如,然後代替將代碼包裝在jquery函數中,只需將它包裝在你自己的函數中即函數scriptA(){//你的代碼在這裏}。這有幫助嗎? – 2012-04-20 10:25:17

+0

哦,你將需要使定時器var全局 - 堅持它的功能decleration – 2012-04-20 10:26:03

0

我不確定這是否會起作用,具體取決於插入腳本的位置,瀏覽器可能會在執行代碼之前執行代碼,即使已完成創建DOM。 在執行代碼之前,最好使用像jQuery這樣的框架並等待文檔完成加載。如果你使用jQuery,它會這樣工作:

<script id="a"> 
    $(document).ready(function(){ 
     //do your stuff here 

     $("#a").remove(); 
    }); 
</script>