Есть ли какая-либо функция JavaScript, которая может объединять $ -функцию как из прототипа, так и из jQuery?
Да, это реальный прецедент, с которым я столкнулся сейчас. Я нахожу функцию $ в Prototype, а $ в jQuery противоречит друг другу. Я знаю, что мы могли бы нам jQuery.noConflict() переписать $ обратно на Prototype, однако, сделав это, мне придется переписать jquare-специфический jquery-код, который использует эту функцию $, или иметь 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.
Спасибо.
обновление: перепишите вопрос, чтобы быть более понятным.
Спасибо за этот ответ. Примерно через 1 неделю, пытаясь найти разные подходы, я считаю, что этот подход является наиболее подходящим решением. Это решение имеет две основные возможности: (1) Переписать jQuery $, специфичный для анонимных функций, таких как выше, и (2) Нет прямого вызова Prototype $ в анонимной функции выше. Сказав это (две ошибки), это решение является лучшим для большинства случаев использования, которые у меня есть. Спасибо. – Nordin