jquery 플러그인 충돌 (jquery.noconflict) 해결 방법 공유
jQuery.noConflict 방법에는 $참조를 인계하는 동시에 jQuery 객체 자체를 인계할지 여부를 결정하는 선택할 수 있는 부울 매개 변수가 포함되어 있습니다[1].
jQuery.noConflict([removeAll])
기본적으로 noConflict를 실행하면 $변수 제어권을 $생성된 첫 번째 라이브러리에 넘깁니다.removeAll이true로 설정되었을 때, noConflict를 실행하면 $와 jQuery 대상 자체의 제어권을 첫 번째 라이브러리에 넘깁니다.
예를 들어 KISSY와 jQuery를 혼용하고 $= KISSY를 관용하여 API 조작을 간소화할 때 이 방법을 통해 명칭 충돌 문제를 해결할 수 있다.
그렇다면 이 메커니즘은 어떻게 실현되었을까?jQuery 원본의 시작을 읽는다[2]. 가장 먼저 하는 일은 다음과 같다.
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
// Map over the $ in case of overwrite
_$ = window.$,
쉽게 이해할 수 있는 것은, jQuery는 두 개의 개인 변수를 통해 window 환경에서 jQuery와 $두 개의 대상을 비추어 변수가 강제로 덮어쓰지 않도록 합니다.noConflict 메서드가 호출되면jQuery, _$, jQuery, $4자 간의 차이로 제어권의 이관 방식을 결정합니다. 구체적인 코드는 다음과 같습니다.
noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery;} 위에서 말한 매개 변수 설정 문제를 다시 보십시오. 만약 deep이 설정하지 않았다면 $window.$덮어쓰기,이 때 jQuery 별명 $은 효력을 상실했지만, jQuery 자체는 손상되지 않았습니다.만약 다른 라이브러리나 코드가 $변수를 다시 정의한다면, 제어권은 완전히 넘겨집니다.반대로 deep이true로 설정되면jQuery가 window를 덮어씁니다.jQuery, $및 jQuery가 효력을 상실합니다.
이러한 조작의 장점은 프레임워크 혼용이든 jQuery 멀티버전이든 고도의 충돌이 공존하는 실행 환경이든 noConflict 방법이 제공하는 이관 메커니즘과 그 자체가 덮어쓰지 않은 jQuery 대상을 되돌려주기 때문에 변수 매핑을 통해 충돌을 완전히 해결할 수 있다는 것이다.
그러나 플러그인의 실효 등 문제를 피할 수 없습니다. 물론 상하문 파라미터를 간단하게 수정하면 $별명을 복구할 수 있습니다.
var query = jQuery.noConflict(true);
(function ($) {
// , jQuery
})(query);
아래의 예는 마찬가지로 이 문제를 해결한 것이다
jQuery가 탄생한 이래로 버전이 점점 많아지고 jQuery 홈페이지의 새로운 버전은 끊임없이 업데이트되고 발표되고 있다. 그러나 우리는 이전 프로젝트에서 이미 낡은 버전의 jQuery를 사용했다. 예를 들어 이미 등장한:1.3.X、1.4.X、1.5.X, 1.6.2 등등.
프로젝트의 수요로 인해 반드시 비교적 새로운 버전의 jQuery를 끊임없이 사용해야 한다. 그러나 원래 존재하고 이미 채택된 낡은 jQuery 버전에 대해 우리는 어떻게 여러 개의 서로 다른 jQuery 버전이 같은 페이지에서 병존하고 충돌하지 않도록 합니까?
사실, jQuery를 이용해서.noConflict () 특성은 jQuery를 다른 JS 라이브러리와 병존시킬 수 있을 뿐만 아니라, 예를 들어Prototype과 병존시킬 수 있습니다.jQuery 자체의 다른 버전과 충돌하지 않고 병존할 수도 있습니다.
jQuery
<br> var jQuery_New = $.noConflict(true);
<br>
<br> var jQuery_1_6_2 = $.noConflict(true);
<br>
<br> var jQuery_1_5_2 = $.noConflict(true);
<br>
<br> var jQuery_1_4_2 = $.noConflict(true);
<br>
<br> var jQuery_1_3_2 = $.noConflict(true);
<br>
<br> alert(jQuery_New.fn.jquery);
<br> alert(jQuery_1_6_2.fn.jquery);
<br> alert(jQuery_1_5_2.fn.jquery);
<br> alert(jQuery_1_4_2.fn.jquery);
<br> alert(jQuery_1_3_2.fn.jquery);
<br>
<br> jQuery_New(function($){$('<p> '+$.fn.jquery+' 。</p>').appendTo('body');});
<br> jQuery_1_6_2(function($){$('<p> '+$.fn.jquery+' 。</p>').appendTo('body');});
<br> jQuery_1_5_2(function($){$('<p> '+$.fn.jquery+' 。</p>').appendTo('body');});
<br> jQuery_1_4_2(function($){$('<p> '+$.fn.jquery+' 。</p>').appendTo('body');});
<br> jQuery_1_3_2(function($){$('<p> '+$.fn.jquery+' 。</p>').appendTo('body');});
<br>
jQuery
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.