2013-05-03 80 views
3

我想從JavaScript文件中包含jQuery。我嘗試了以下方法,但它不起作用。從另一個JavaScript文件中包含jQuery

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>'; 
document.getElementsByTagName('head')[0].appendChild(script); 
+0

沒有按的appendChild不會自動解析HTML字符串 – Dave 2013-05-03 23:32:13

回答

7

</script>關閉開口<script>塊,即使是在一個字符串。我會做這種方式:

(function() { 
    var script = document.createElement('script'); 
    script.type = 'text/javascript'; 
    script.src = document.location.protocol + '//code.jquery.com/jquery-1.9.1.min.js'; 

    document.getElementsByTagName('head')[0].appendChild(script) 
})(); 
+0

不錯,謝謝!只有一件事,我有我的jQuery代碼在相同的.js文件,您的代碼現在包含(您的代碼是在頂部是。js文件),所以它不會加載jquery。任何類型的解決方案?再一次,非常感謝你! – Harry 2013-05-03 23:44:17

+0

@Enigmo:所以這段代碼是在一個利用jQuery的文件中? – Blender 2013-05-03 23:45:23

+0

爲什麼你需要設置script.type? – dandavis 2013-05-04 00:07:15

1

你不能有任何地方</script>一個腳本塊內,甚至沒有在字符串中,因爲它會結束腳本塊存在。

分手結束標記的字符串:

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></scr'+'ipt>'; 
+0

或者逃離'/':) – Ian 2013-05-03 23:47:43

+0

<\/script>作品 – dandavis 2013-05-04 00:04:56

0
var script = document.createElement('script'); 
script.src = 'http://code.jquery.com/jquery-1.9.1.min.js'; 
document.getElementsByTagName('head')[0].appendChild(script); 
1
(function() { 
     var script = document.createElement('script'); 
     script.type = "text/javascript"; // keeping older browsers happy. 
     script.src = window.location.protocol + '//code.jquery.com/jquery-1.9.1.min.js'; 
     // browsers prevent cross-protocol downloading. 
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);// In Opera a site can get by without a <head> 
    })(); 
+0

'window.location.protocol'離開冒號到最後。 – Blender 2013-05-03 23:55:21

1

只需使用jQuery的getScript加入()方法加載jQuery的:http://api.jquery.com/jQuery.getScript/

...只是開個玩笑。

試試這個代碼:

var head = document.getElementsByTagName('head')[0]; 
var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'http://code.jquery.com/jquery-1.9.1.min.js'; 
head.appendChild(script); 

來源:http://unixpapa.com/js/dyna.html

另外,如果使用HTTPS網頁上,您將需要從HTTPS兼容CDN加載腳本,像谷歌託管庫( src =「// ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js」)

-1

首先,變量腳本包含序列</script>,您無法使其顯示因爲它在你的代碼中,因爲瀏覽器會屁股梅(它必須),它是<script>標籤關閉。 例如,如果您的腳本代碼中包含語法錯誤,這是一個沒有接近"它會看起來像

<script>var bad = "abcd ;</script> 

解決這個可以打破</script>串像"</scr" + "ipt>"或者你可以逃避它一個字符串變量:"<\/script>"

這樣:

var script = '<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"><\/script>'; 
document.getElementsByTagName('head')[0].appendChild(script); 

第二件事情是appendChild()函數接受一個Node元素,而不是一個字符串

這樣:

var script = document.createElement("script"); 
script.src = "http://code.jquery.com/jquery-1.9.1.min.js"; 
document.getElementsByTagName("head")[0].appendChild(script); 

不管怎麼說,我更喜歡使用一個模塊和JavaScript器,例如RequireJS

+0

爲什麼要投票? – 2013-05-04 00:01:26

0

使用一個微小的可重複使用的腳本加法:

function fetch(url){ 
var d=document, s='script'; 
d.getElementsByTagName(s)[0].parentNode.appendChild(d.createElement(s)).src=url; 
} 

fetch('//code.jquery.com/jquery-1.9.1.min.js'); 

並不是所有的頁面都在所有的瀏覽器負責人,但如果一個腳本運行,這樣可以同級腳本標籤...