7

所以我正在开发一个同时使用 jQuery 和prototype.js 的网站,但是它们相互冲突。

我进行了相当多的研究,发现人们解决此问题的唯一方法是使用

<script>
 jQuery.noConflict();

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

 // Use Prototype with $(...), etc.
 $('someid').hide();

但是我不想将 $ 更改为 jQuery,因为这意味着我必须编辑相当多的预先编写的代码。有没有办法阻止它们发生冲突并将 jQuery 保留为 $?

4

5 回答 5

10

您可以创建一个闭包(在 末尾body),而不是使用 document ready,例如:

(function($) {
  //jQuery stuff
  $('.elem') // $ refers to jQuery
})(jQuery);

如果我正确理解你的问题

于 2012-04-05T19:48:27.347 回答
6

不,不是我听说过的。为了尽量减少代码转换的痛苦,你可以这样做:

var j$ = jQuery.noConflict();

然后,您可以将 jQuery$调用替换为j$. 您甚至可以使用简单的搜索/替换调用。

于 2012-04-05T19:47:52.623 回答
2
( function($){
   // $('jquery here')
})(jQuery);

函数内的所有 jquery 代码都可以使用$.

于 2012-04-05T19:51:09.523 回答
0

有一种简单的方法可以做到这一点,将你已经编写好的代码包装到一个函数中并将 jQuery 传递给它。这样你就可以保留你已经写好的代码,并且只使用 jQuery 作为新代码的标识符:

(my_old_stuff = function($){
   $.my_existing_function(){
       alert('i allready exist');
   };
)(jQuery);

jQuery.my_existing_function();

那应该行得通。

另一方面:用 jQuery 替换 $ 似乎并不是自动替换的任务。

于 2012-04-05T19:51:59.160 回答
0

虽然这是一篇很老的帖子,但我确实遇到了同样的问题。有很多选项可以处理它。我不会碰预先编写的代码,让原型 js 使用 $。

来自jQuery 文档

<!-- Loading jQuery before other libraries. -->
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>

// Use full jQuery function name to reference jQuery.
jQuery( document ).ready(function() {
    jQuery( "div" ).hide();
});

// Use the $ variable as defined in prototype.js
window.onload = function() {
    var mainDiv = $( "main" );
};

</script>

这是所有可用的选项。

https://learn.jquery.com/using-jquery-core/avoid-conflicts-other-libraries/

于 2017-05-26T13:21:29.180 回答