2013-03-08 86 views
4

說我像這樣沒有衝突運行一個版本的jQuery:可以getscript在jquery noconflict中運行導入的腳本嗎?

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type="text/javascript">var jQuery191 = $.noConflict(true);</script> 

而我卻認爲應該用無衝突版本jQuery191上運行的外部.js文件和包含的(jQuery) jQuery對象在腳本的底部。

如果我列入getScript()的.js文件,並與無衝突jQuery對象運行它:

(function (jQuery) { 
    $.getScript("js.js"); 
})(window.jQuery191) 

請問腳本與jQuery191或與原jQuery運行?或者這個邏輯是愚蠢的。

+0

在你的情況下,它運行的是原始的jQuery,因爲你沒有將jQuery191版本設置爲'$' – 2013-03-08 22:34:36

回答

2

getScript只會加載腳本並將其添加到頁面,它根本不會影響腳本的行爲。如果腳本通過它的全局名稱訪問jQuery,那麼它將不會找到它(由於調用了noConflict),並且將無法正確運行。

如果可以的話,我會打電話前noConflict建議包括腳本,否則你就必須修改腳本,尋找在jQuery的你把它(jQuery191)的地方。

0

在包裝器((function() { ... })())中,您可以將jQuery變量定義爲全局範圍內jQuery191變量的副本。

這意味着$.getScript不使用該變量,但調用jQuery.getScript的作品。 因爲它是一個匿名函數,所以包裝器中的$現在引用外部$變量(在本例中爲全局對象中的$)。通過在包裝中加入這個

(function ($) { 
    $.getScript('foo.js'); 
})(window.jQuery191); 

或者: 您可以通過重命名你的包裝的第一個參數解決這$

var $ = jQuery 

現在,無論$jQuery包含jQuery191副本全局範圍的變量。

+0

這是正確的,但對foo.js無關緊要 - 它仍然不受影響在它被包括在頁面中的上下文中。 – mgibsonbr 2013-03-08 22:37:17

+1

但是,$ .getScript會將腳本追加到,導致它在全局範圍內運行,其中'$'和'jQuery'不是jQuery 1.9.1 – 2013-03-08 22:37:44

相關問題