Често се налага да ползваме в една страница двете библиотеки, най-често това се налага ако поставим lightbox, а страницата ни ползва jQuery.
Има две възможни решения на този проблем.
1. Решение 1 – Заменяне на променливата на основната функция $ на jQuery с друга например $j
За целта в началото на вашата страница поставете
<script>
var $j = jQuery.noConflict();
</script>
След това където се налага да ползвате jQuery функция използвайте $j( ….
2. Решение 2 – презапишете функцията на jQuery
Отново в началото на страницата поставете
jQuery.noConflict();
и след това ползвайте функциите на jQuery по следния начин
jQuery(document)…
След като направите някоя от промените за jQuery, функциите на prototype можете да ползвате по стандартният им начин.
Напълно против съм използването на два framework-а, които решават подобни проблеми, в една страница. Ако все пак някой е твърде упорит и реши да ги използва заедно по-добър вариант, според мен, са две immediate функции. По този начин ще се спаси global environment и нещата ще са малко по-изчистени. Освен това няма да се налага replace на всички $ с $j в, евентуалния стар, код с jQuery.
(function ($) {
//Your jQuery code goes here…
console.log($ === jQuery);
}(jQuery));
(function ($) {
//Your Prototype code goes here
console.log($ === Prototype);
}(Prototype));
Напълно съгласен съм, че не е добра идея да се ползват заедно, дори съм привърженик на чистото писане на javascript, но когато се налага това са възможни решения.
Благодаря за предложенето трето решение! 🙂