2016-11-08 62 views
3

在我的項目中,我必須在頁面加載後動態加載JS和CSS文件。 通過使用下面的代碼,我可以添加和刪除js文件但刪除前一個添加新文件後,然後前面的文件不會顯示在標題中,但是當我運行代碼時,兩個js文件代碼都會執行。我不知道如何完全刪除文件,有些身體可以幫助我。 對於該代碼是。如何在jquery頁面加載後完全刪除和添加js文件?

在視圖頁面標題: -

<link rel="stylesheet" id="videoCss" /> 
<script id="videojs"></script> 

的Jquery的動態加載JS和CSS文件: -

function addRemoveJsCssFile(filename, filetype) 
    { 
     var fileref=''; 
     if (filetype == "js") { //if filename is a external JavaScript file 
      document.getElementById("videojs").remove(); 
      fileref=document.createElement('script'); 
      fileref.setAttribute("type", "text/javascript"); 
      fileref.setAttribute("src", filename); 
      fileref.setAttribute("id", "videojs"); 
     } 
     else if (filetype == "css") { //if filename is an external CSS file 

      document.getElementById("videoCss").remove(); 
      fileref = document.createElement("link"); 
      fileref.setAttribute("rel", "stylesheet"); 
      fileref.setAttribute("type", "text/css"); 
      fileref.setAttribute("href", filename); 
      fileref.setAttribute("id", "videoCss"); 
     } 
     if (typeof fileref != "undefined") 
      document.getElementsByTagName("head")[0].appendChild(fileref) 
    } 

在這個函數中,我們必須通過文件位置和文件類型即css或js動態添加文件。謝謝。

+0

你可以參考這個[鏈接](http://www.javascriptkit.com/javatutors/loadjavascriptcss2.shtml)。它可以幫助! – RonyLoud

+0

考慮到將「

0

您可以使用$ .getScript()動態加載js文件。

1

我不知道如果我理解你的問題,但讓我試着解釋:

如果原始腳本是在頭部,它將被立即執行,因爲JavaScript是一種程序語言,所以在「稍後」放置的腳本中沒有任何事情可做:早些時候定義的腳本會在早些時候執行,所以當您調用函數時可能會遇到問題,停止videojs執行就太遲了。

另一方面,以前定義的腳本,你不能看到後面定義的腳本標籤..或更好的,你可以如果你推遲,但在延期的情況下,你會再次爭取同一問題,videojs腳本總是會被執行(總是太遲或太早,因爲你的語句執行或之前或之後沒有第三種方式)。

當然,你可以在剛剛設置一個全局對象之前加載一個腳本,它可以對videojs說:「停下來,不要繼續你的東西!」但顯然你應該編輯videojs代碼,用一個包裝器「if」來請求這個對象繼續進行許可,我認爲這不是你想要的迴應。

但問題是:在那個JavaScript videojs中執行了什麼,一個事件綁定器開始加載?或者在另一個事件?或者只是一系列被執行的語句 - 對於文字遊戲而言,後悔呢?

在第一種情況和第二種情況中,您可以執行以下操作:如果video.js在觸發事件時啓動,則可以停止該函數的執行,在該觸發器之前進行操作:必須刪除事件訂閱。要解除綁定事件,您必須知道第一個腳本是如何操作的,以及它爲了解綁定它所訂閱的事件。

這裏是如何的jQuery ready事件之前執行腳本(但它是有效的也是本地JavaScript事件,所以我認爲這可能是有益的):

running jQuery code before the dom is ready

這個答案甚至對每個文檔是非常有用的事件,不僅用於加載或「jQuery準備好」。

但是,即使它可以去除綁定「消失」每videojs腳本的影響,它不是一個乾淨的工作,因爲

  1. 總體而言,videojs已執行
  2. 這將videojs只工作至少它可以只與使用相同事件啓動的硬編碼腳本一起工作,但不適用於所有硬編碼腳本

因此,我建議您的目的是完全用這個來管理腳本的加載和卸載經理,不要硬編碼他們在HTML中。

PS:你有沒有聽說過require.js?

If not, take a look here

1

試試這個

$('#scriptid').remove(); //remove it first and then add the new one 

var script = document.createElement('script'); 
script.src = something; 

document.head.appendChild(script); //Add element to head tag 

OR 

$("<style type='text/css' href=''></style>").appendTo("head"); 
$("<script type='text/javascript' src=''></script>").appendTo("head"); 
+0

好吧,我也試過這個。它追加了新的javaScript,但我也必須動態地刪除以前的腳本。 –

相關問題