Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery和prototype.js冲突,如何将jQuery保持为$?_Jquery_Prototypejs - Fatal编程技术网

jQuery和prototype.js冲突,如何将jQuery保持为$?

jQuery和prototype.js冲突,如何将jQuery保持为$?,jquery,prototypejs,Jquery,Prototypejs,因此,我正在开发一个同时使用jQuery和prototype.js的网站,但是它们之间存在冲突 我做了一些研究,发现人们解决这个问题的唯一方法是使用 <script> jQuery.noConflict(); // Use jQuery via jQuery(...) jQuery(document).ready(function(){ jQuery(\"div\").hide(); }); // Use Prototype with $(...), etc.

因此,我正在开发一个同时使用jQuery和prototype.js的网站,但是它们之间存在冲突

我做了一些研究,发现人们解决这个问题的唯一方法是使用

<script>
 jQuery.noConflict();

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

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

jQuery.noConflict();
//通过jQuery(…)使用jQuery
jQuery(文档).ready(函数(){
jQuery(\“div\”).hide();
});
//将原型与$(…)等一起使用。
$('someid').hide();


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

不,我没听说过。为了最大限度地减少代码转换的痛苦,您可以这样做:

var j$ = jQuery.noConflict();

然后可以用
j$
替换jQuery
$
调用。您甚至可以使用一个简单的搜索/替换调用。

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

如果我没弄错你的问题

( function($){
   // $('jquery here')
})(jQuery);

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

有一种简单的方法可以做到这一点,方法是将allready编写的代码包装到函数中,并将jquery传递给它。这样,您就可以保留allready编写的代码,并仅将jQuery用作新代码的标识符:

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

jQuery.my_existing_function();
这应该行得通


另一方面:用jQuery替换$对于自动替换来说似乎并不是一个很大的任务。

虽然这是一篇很老的文章,但我也遇到了同样的问题。 有很多选择可以处理它。我不会碰预先编写的代码,让prototype js使用$


//使用完整的jQuery函数名引用jQuery。
jQuery(文档).ready(函数(){
jQuery(“div”).hide();
});
//使用prototype.js中定义的$variable
window.onload=函数(){
var mainDiv=$(“主”);
};
这里是所有可用的选项


你是在问,在同一个范围内,$是否可以表示两种不同的东西吗?他是在问,是否有
noConflict()
的原型版本。如果你的所有jQuery都在
$(文档)中,那么可能会重复。ready(function(){
,你可以使用
jQuery(document)。ready(function($){
并在其中安全地使用
$
。为什么不删除其中一个库呢?程序员不应该同时需要这两个库。也就是说,将
jQuery(document).ready(function(){
更改为
jQuery(document).ready(function($){
,你已经准备好了。决定继续这样做,但是prototype.js现在显示出一个错误。我不知道@Elliot最初的评论是什么,但我不知道你的iLife如何取代jQuery的
.ready()
。并说:“不用document ready,你可以创建一个闭包…”没有什么意义。
.ready()
回调与您的回调一样是一个闭包。我认为这导致了全局和局部变量问题,所以决定使用上面的一个,谢谢!
(my_old_stuff = function($){
   $.my_existing_function(){
       alert('i allready exist');
   };
)(jQuery);

jQuery.my_existing_function();
<!-- 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>