在网站上冲突的JQuery和Prototype

时间:2012-03-07 07:46:57

标签: javascript jquery

我有一个使用Prototype的遗留网站。但我还想使用JQuery。当它们都覆盖$符号时,如何将Prototype和JQuery用于同一页面?

4 个答案:

答案 0 :(得分:4)

默认情况下,jQuery使用“$”作为“jQuery”的快捷方式。但是,您可以在jQuery之后的任何时候调用jQuery.noConflict()来覆盖该默认值,并且其他库都已加载。例如:

<html>
 <head>
   <script src="prototype.js"></script>
   <script src="jquery.js"></script>
   <script>
     jQuery.noConflict();

     // Use jQuery via jQuery(...)
     jQuery(document).ready(function(){
       jQuery("div").hide();
     });

     // Use Prototype with $(...), etc.
     $('someid').hide();
   </script>
 </head>
 <body></body>
 </html>

请参阅http://docs.jquery.com/Using_jQuery_with_Other_Libraries

答案 1 :(得分:2)

除了使用.noConflict()方式之外,您还可以调整jQuery代码的范围。

<script>
(function($) {
//write your jQuery code here.

})(jQuery);
</script>

答案 2 :(得分:2)

如果你想使用一些速记,请执行

var j$ = jQuery.noConflict();

现在你可以使用j $代替$ for jquery

答案 3 :(得分:1)

与Elementenfresser的答案类似,我建议除了使用jQuery.noConflict()之外;你可以使用匿名函数包装整个jQuery代码,保持所有jQuery代码完整,而无需将所有“$”更改为“jQuery”。

  jQuery.noConflict();
  (function($){
    $("div").hide(); //will use jQuery
  })(jQuery);

 $("div").hide(); //will use prototype
 jQuery("div").hide(); //will use jQuery again.

您可以使用匿名函数包装所有使用jQuery的javascript文件。您根本不必将$更改为jQuery。它也是一种性能改进,因为函数中声明的所有变量都不会附加到全局范围 - 使您的应用程序更快。