jQuery -prototype冲突

时间:2009-06-09 16:21:40

标签: jquery prototypejs conflict

我正在使用prototype和script.aculo.us的组合在我的asp.net页面中实现灯箱效果。我的页面中也包含了jquery。我的页面中有几个DIV标签,但是在包含了在我的页面头部的原型文件,我无法使用jquery读取我的javascript中的div

var div = $("#divLeftSideModelsList"); 
alert(div)

给我一​​个错误,说该对象为null 但是

var div = document.getElementById("divLeftSideModelsList")

正在给我这个对象。

这是因为jQuery和其他框架之间存在一些冲突吗?

请咨询

4 个答案:

答案 0 :(得分:6)

请仔细阅读:http://docs.jquery.com/Using_jQuery_with_Other_Libraries

展示了很好的例子:)

覆盖$ -FUNCTION

但是,您可以在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>

这会将$还原为原始库。您仍然可以在应用程序的其余部分使用“jQuery”。

此外,还有另一种选择。如果你想确保jQuery不会与另一个库冲突 - 但是你想要一个简短名称的好处,你可以这样做:

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

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

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

答案 1 :(得分:2)

您应该在noConflict mode中使用jQuery。然后使用jQuery()代替$()

答案 2 :(得分:0)

奇怪的错误。无论如何,原型和jQuery都重新定义了全局变量$。

请阅读this以了解jQuery如何与其他图书馆合作。

它基本上说调用jQuery.noConflict()只留下$变量供其他lib使用

答案 3 :(得分:-2)

此代码是否有效:

var div = jQuery("#divLeftSideModelsList");
alert(div);