2013-03-08 3 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> 

그리고 난에 (jQuery)의 jQuery 오브젝트를 충돌없이 버전 jQuery191으로 실행해야 외부의 .js 파일을했다 및 포함 스크립트 맨 아래에.

나는 getScript()에서의 .js 파일을 포함하고 충돌없이의 jQuery 객체를 실행 한 경우 :

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

스크립트가 jQuery191 또는 원래 jQuery를 실행할 수시겠습니까? 아니면이 논리가 그냥 바보 같습니까?

+0

jQuery191 버전을'$' –

답변

2

getScript은 스크립트를로드하고 페이지에 추가하기 만하면 스크립트의 동작에 전혀 영향을 미치지 않습니다. 스크립트가 전역 이름으로 jQuery에 액세스하면 noConflict이 호출되어 해당 스크립트를 찾지 못하게되어 제대로 실행되지 않습니다. 당신이, 내가이 noConflict를 호출하기 전에 스크립트 포함 좋을 것 할 수있는 경우

, 그렇지 않으면 당신은 당신이 그것을 (jQuery191)을 넣어 장소에서 jQuery를 찾기 위해 스크립트를 수정해야합니다.

0

래퍼 ((function() { ... })()) 내에는 변수가 전역 범위에있는 jQuery191 변수의 복사본에 정의됩니다.

즉, $.getScript은 해당 변수를 사용하지 않고 jQuery.getScript을 호출합니다. 익명 함수이기 때문에 래퍼 내부의 $은 바깥 쪽 $ 변수 (이 경우 전역 개체의 $)를 참조합니다. 당신은 $에 래퍼의 첫 번째 매개 변수 이름을 변경하여이 문제를 해결 할 수 있습니다

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

또는 래퍼이를 추가하여 : 이제

var $ = jQuery 

, 모두 $jQueryjQuery191의 복사본이 들어 있습니다 전역 범위의 변수.

+0

으로 설정하지 않았기 때문에 원래 jQuery와 함께 실행됩니다. 맞지만'foo.js '는 중요하지 않습니다. 여전히 영향을받지 않습니다. 페이지에 포함 된 문맥에 따라 – mgibsonbr

+1

그러나 $ .getScript는 스크립트를 에 추가하여 글로벌 범위에서 실행하게됩니다. 여기서'$'및'jQuery'는 jQuery 1.9.1이 아닙니다. –

관련 문제