프로토 타입 및 jQuery의 $ 기능을 통합하십시오
-
12-09-2019 - |
문제
프로토 타입과 jQuery에서 $ 함수를 통합 할 수있는 JavaScript 기능이 있습니까?
예, 이것은 내가 지금 직면하고있는 실제 사용 사례입니다. 프로토 타입에서 $ 함수를 발견하고 jQuery의 $는 서로 충돌하고 있습니다. 나는 우리가 jQuery.noconflict ()를 프로토 타입으로 되돌릴 수 있도록 jQuery.noconflict ()를 다시 만들 수 있다는 것을 알고 있지만, 그렇게함으로써 해당 $ 함수를 사용하는 jQuery-specific javacript 코드를 다시 작성하거나 코드 블록에 특정 jQuery를 사용해야합니다 (예 : 익명 기능).
두 라이브러리에 기존 코드를 다시 작성하지 않고 한 페이지에 사용하지 않고 더 쉬운 방법이 있습니까?
이 질문에 대답 할 수있는 코드는 다음과 같을 수 있으며 피드백에 크게 감사합니다.
<script type="text/javascript" src="/path/to/prototype.js"></script>
<script type="text/javascript" src="/path/to/jquery.js"></script>
<script type="text/javascript">
/* <![CDATA[ */
var $j = jQuery.noConflict();
var $p = $; // reference to prototype's $
var $ = function(E, F){
var isJQuery = true;
//TODO: logic to determine which $ to use here YOUR SUGGESTION HERE ;-)
var result = null;
if(isJQuery){
result = $j(E, F);
} else { // prototype
//TODO: code to delegate prototype $
}
return result;
}
/* ]]>*/
</script>
// ... any existing javacode jQuery and Prototype using $ function.
감사.
업데이트: 더 명확하게 질문을 다시 작성하십시오.
해결책
우선, 두 라이브러리가 같은 페이지에 포함되어야하는 유용한 사례를 거의 찾을 수 없습니다. 따라서 하나를 제거하는 것을 고려할 수 있습니다.
이것이 플러그인 사용 때문이라고 생각하지만 상대 플러그인 목록을 살펴보십시오. 대안이 있다고 확신합니다.
둘째, jQuery 특정 코드의 경우 익명 기능 트릭을 사용하여 다시 작성하기가 매우 쉽습니다.
(function($){
... your code here ...
})(jQuery);
이것은 이벤트에 바인딩하기보다는 전역 변수 나 방법을 넣지 않는 대부분의 경우에 작동합니다.
다른 팁
나는 항상 Gizmo의 예와 비슷한 모든 jQuery 코드를 함수에 넣는 습관을 들었습니다.
jQuery(function($) {
// jQuery code here, using $
});
이것은 Document.ready Event Handler와 동일합니다.
JQuery는 프로토 타입으로 잘 연주하는지 확인했습니다. 자세한 내용은이 페이지를 확인하십시오. 다른 라이브러리와의 충돌을 피합니다.
나는 이전에 같은 페이지에서 사용 된 두 라이브러리를 보았으며 일반적으로 한 페이지가 다른 라이브러리를 사용하고 다른 페이지를 사용하는 페이지에있는 타사 앱 때문입니다. 그러나 모든 개발을 직접하고 있다면, 나는 하나를 고수하는 것이 좋습니다.