동일한 페이지에서 여러 버전의 jQuery를 사용할 수 있습니까?


426

내가 작업중 인 프로젝트는 고객의 웹 페이지에서 jQuery를 사용해야합니다. 고객은 우리가 몇 가지 포함하는 공급거야 코드의 덩어리 삽입합니다 <script>A의 위젯 구축 요소 <script>-created을 <iframe>. 최신 버전의 jQuery를 아직 사용하지 않는 경우 여기에는 <script>Google의 호스팅 된 jQuery 버전이 포함됩니다.

문제는 일부 고객이 이미 이전 버전의 jQuery를 설치했을 수 있다는 것입니다. 최신 버전 인 경우에는 작동하지만 코드는 jQuery 라이브러리에서 최근에 도입 된 일부 기능에 의존하므로 고객의 jQuery 버전이 너무 오래된 경우도있을 수 있습니다. 최신 버전의 jQuery로 업그레이드 할 필요는 없습니다.

고객 페이지의 코드를 방해하거나 영향을 미치지 않는 코드 컨텍스트 내에서만 사용하기 위해 최신 버전의 jQuery를로드 할 수있는 방법이 있습니까? 이상적으로는 jQuery가 있는지 확인하고 버전을 감지하고 너무 오래된 경우 코드에 사용하기 위해 최신 버전을로드 할 수 있습니다.

나는 <iframe>고객의 도메인에 jQuery를로드 할 아이디어를 가지고 있었고 우리를 포함하고 <script>있습니다. 여분 <iframe>의).



1
나는 같은 문제에 부딪쳤다. 임베디드 스크립트에서 jQuery를 몇 번만 사용했기 때문에 jQuery를 모두 포기하고 JavaScript에서 직접 필요한 것을 수행하기로 결정했습니다. 이 사이트 : youmightnotneedjquery.com 은 매우 유용했습니다.
Ferruccio

답변:


578

예, jQuery의 noconflict 모드로 인해 가능합니다. http://blog.nemikor.com/2009/10/03/using-multiple-versions-of-jquery/

<!-- load jQuery 1.1.3 -->
<script type="text/javascript" src="http://example.com/jquery-1.1.3.js"></script>
<script type="text/javascript">
var jQuery_1_1_3 = $.noConflict(true);
</script>

<!-- load jQuery 1.3.2 -->
<script type="text/javascript" src="http://example.com/jquery-1.3.2.js"></script>
<script type="text/javascript">
var jQuery_1_3_2 = $.noConflict(true);
</script>

그리고, 대신 $('#selector').function();, 당신은 할 것 jQuery_1_3_2('#selector').function();jQuery_1_1_3('#selector').function();.


13
고마워, ceejayoz! 그것은 가능한 솔루션처럼 보입니다-유일한 잠재적 인 문제는 코드 솔루션의 첫 부분을 제어 할 수 없다는 것입니다 (이전 버전의 jQuery를 다른 별칭에 할당). 고객이 jQuery를 사용하는 방식은 다양하며 제 통제 범위를 벗어납니다. 후반부를 안전하게 사용할 수 있습니까, 아니면 두 라이브러리 모두 noConflict ()를 호출해야합니까?
Bungle

7
네, 후반 만 사용할 수 있습니다.
ceejayoz 2016 년

9
원본 페이지에 실제로 투명합니까? 이 코드 이후에 $ 또는 jQuery를 사용하는 경우 자체 jQuery 버전 또는 최신 버전 (플러그인이 더 적은 플러그인이 설치되어 있음)을 참조합니까?
Wim

2
@ceejayoz, 그 안에 많은 $를 사용하는 자체 호출 기능이 있으면 어떻게됩니까? 충돌이없는 섹션 내에서 모든 $를 jquery_1_3_2로 변경해야합니까 ???
klewis

37
@blachawk 아니요, 별명을 지정하십시오. (function($) { /*your code here*/ }(jquery_x_x_x));
Fabrício Matté

85

이것을보고 시도한 후에 실제로 한 번에 둘 이상의 jquery 인스턴스를 실행할 수 없다는 것을 알았습니다. 주변을 검색 한 후 이것이 트릭을 수행했으며 코드가 훨씬 적다는 것을 알았습니다.

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
    <script>var $j = jQuery.noConflict(true);</script>
    <script>
      $(document).ready(function(){
       console.log($().jquery); // This prints v1.4.2
       console.log($j().jquery); // This prints v1.9.1
      });
   </script>

"$"다음에 "j"를 추가하면됩니다.

$j(function () {
        $j('.button-pro').on('click', function () {
            var el = $('#cnt' + this.id.replace('btn', ''));
            $j('#contentnew > div').not(el).animate({
                height: "toggle",
                opacity: "toggle"
            }, 100).hide();
            el.toggle();
        });
    });

6
너무 많은 장소에서 jquery 변수의 이름을 바꾸지 않으려면 다음 코드 안에 기존 코드를 넣을 수 있습니다.(function($){ })($j)
Marinos An

36

http://forum.jquery.com/topic/multiple-versions-of-jquery-on-the-same-page 에서 가져 왔습니다 .

  • 원본 페이지에 "jquery.versionX.js"가로드 $되고jQuery versionX에 속한다.
  • 지금 - 당신은 당신의 "jquery.versionY.js"을 호출 $하고 jQueryversionY에 속하는 플러스 _$_jQueryversionX에 속한다.
  • my_jQuery = jQuery.noConflict(true);- 지금 $jQueryversionX에 속하는, _$그리고 _jQuery아마 널 (null), 그리고 my_jQueryversionY이다.

9
나는 링크에 갈 때까지 이해하지 못했습니다. "jQuery.xxjs를로드하면 기존 $ 및 jQuery vars를 덮어 씁니다 ... 그러나 백업 사본 (_ $ 및 _jQuery)을 유지합니다. noConflict (true)를 호출하면 이전과 같이 상황이 복원됩니다. 당신의 js 포함 "
Colin


앞으로는 외부 소스 참조에 대해보다 명확하게 설명하십시오. 자세한 내용은 stackoverflow.com/help/referencing
Matt

23

원하는만큼 페이지에 다양한 jQuery 버전을 가질 수 있습니다.

사용 jQuery.noConflict():

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script>
    var $i = jQuery.noConflict();
    alert($i.fn.jquery);
</script> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
    var $j = jQuery.noConflict();
    alert($j.fn.jquery);
</script> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
    var $k = jQuery.noConflict();
    alert($k.fn.jquery);
</script> 

데모 | 출처


23

jQuery의 두 번째 버전을로드 한 다음 원래 버전으로 복원하거나 이전에 jQuery가로드되지 않은 경우 두 번째 버전을 유지할 수 있습니다. 예를 들면 다음과 같습니다.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript">
    var jQueryTemp = jQuery.noConflict(true);
    var jQueryOriginal = jQuery || jQueryTemp;
    if (window.jQuery){
        console.log('Original jQuery: ', jQuery.fn.jquery);
        console.log('Second jQuery: ', jQueryTemp.fn.jquery);
    }
    window.jQuery = window.$ = jQueryTemp;
</script>
<script type="text/javascript">
    console.log('Script using second: ', jQuery.fn.jquery);
</script>
<script type="text/javascript">
    // Restore original jQuery:
    window.jQuery = window.$ = jQueryOriginal;
    console.log('Script using original or the only version: ', jQuery.fn.jquery);
</script>

5

항상 jQuery 최신 또는 최신 안정 버전을 사용해야한다고 말하고 싶습니다. 그러나 다른 버전으로 작업해야 할 경우 해당 버전을 추가하고 $다른 이름으로 이름을 바꿀 수 있습니다 . 예를 들어

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

를 사용하여 무언가를 작성 $하면 최신 버전을 얻을 수 있습니다. 그러나 오래된 것으로 무언가를 해야하는 경우 $oldjQuery대신 대신 사용하십시오 $.

여기에 예가 있습니다

$(function(){console.log($.fn.jquery)});
$oldjQuery (function(){console.log($oldjQuery.fn.jquery)})

데모


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.