Javascript 如何成为jQuery no.冲突专家?
如何成为jQuery no.冲突专家 我主要面对jQuery与JS原型之间的冲突错误。我不是jquery专家 我还能解决所有冲突问题吗。如何获得解决冲突问题的专业知识 如何知道整个代码是jquery。如果简单的javascript和jquery代码混合在一个js文件中会怎么样 如果内部外部js代码直接从Javascript 如何成为jQuery no.冲突专家?,javascript,jquery,Javascript,Jquery,如何成为jQuery no.冲突专家 我主要面对jQuery与JS原型之间的冲突错误。我不是jquery专家 我还能解决所有冲突问题吗。如何获得解决冲突问题的专业知识 如何知道整个代码是jquery。如果简单的javascript和jquery代码混合在一个js文件中会怎么样 如果内部外部js代码直接从 var opbox=""; 这是我不能更改的源订单 1 <script type="text/javascript" src="jquery.min.js"><
var opbox="";
这是我不能更改的源订单
1
<script type="text/javascript" src="jquery.min.js"></script>
2我想从example.js中删除冲突错误
<script type="text/javascript" src="example.js"></script>
3
<script type="text/javascript" src="Prototype.js"></script>
4
<script type="text/javascript" src="scriptaculous.js ></script>
使用jQuery功能时,请调用jQuery.noConflict()
并使用全长jQuery()
对象,而不是使用$
快捷方式
例如:
<script>
$(document).ready(function(){
// Do some DOM manipulation here
});
</scipt>
$(文档).ready(函数(){
//在这里做一些DOM操作
});
将成为:
<script>
jQuery.noConflict();
jQuery(document).ready(function(){
// Do some DOM manipulation here
});
</script>
jQuery.noConflict();
jQuery(文档).ready(函数(){
//在这里做一些DOM操作
});
问题是,如果要在页面上使用Prototype,$
必须是Prototype的$
,而不是jQuery的。由于$
只是jQuery
的别名,因此jQuery提供了一种功能,告诉jQuery将$
的控制权返回到加载jQuery之前拥有的任何东西
这意味着无论何时您可能使用$
,您都会使用jQuery
,例如:
$('.foo').hide(); // Hide all elements with class "foo"
变成
jQuery('.foo').hide(); // Hide all elements with class "foo"
如果您使用的是外部脚本,并且它们使用的是$
,则必须对其进行修改。一种方法是进行搜索和替换,只需将所有(适当的)$
更改为jQuery
另一种方法是将其放在脚本标记后面,包括jQuery:
<script type='text/javascript'>jQuery.noConflict();</script>
…下面是:
})(jQuery);
(是的,这意味着您必须修改外部脚本。)
这样做的目的是将整个外部脚本放在一个函数中,$
符号被解析为jQuery
,而不是原型的$
,因为$
是该函数的一个参数,因此它具有优先权。但是,这种技术在某些脚本中会失败。如果他们期望自己的函数声明发生在全局范围内(例如,成为窗口
对象的属性),那么将整个脚本放在一个函数中将打破这一点。在这些情况下,您必须通过将这些函数分配到窗口来手动导出这些函数,或者使用上面的全局搜索和替换选项
jQuerynoConflict
页面上有这样的例子,尽管它们经常将上述内容与ready
函数结合使用,这可能会有点混淆
请注意bobince关于框架之间冲突的观点,不仅仅限于$
符号。如果您可以坚持只使用一个框架,那么就这样做。为什么不这样做呢
<script>
jQuery.noConflict();
(function($){
$(function(){
alert('code here');
});
})(jQuery);
</script>
jQuery.noConflict();
(函数($){
$(函数(){
警报(“此处代码”);
});
})(jQuery);
您具体需要哪些帮助?基本原则是直截了当的:顺便说一句,noConflict
根本不能保证框架之间,尤其是它们的插件之间不会有冲突。例如,jQuery将自定义属性添加到它正在处理的元素中;通过使用另一个框架处理元素,意外地更改、删除或复制这些属性,您可能会最终混淆它。如果您别无选择,只能使用两个框架,请尽可能将它们的活动彼此分开。但是要极力避免在一个页面上使用两个像jQuery一样具有侵入性的框架。它与大多数库的唯一冲突是“$”函数别名,它是jQuery函数/对象的别名。根据指南编码的插件应该可以工作。我所看到的唯一难以处理的冲突是事件注册冲突……但在外部js中如何处理?始终在外部脚本中使用全长jQuery对象。这样,您只需将对jQuery.noConflict()的调用添加到您的页面中即可。如果$(document).ready(函数(){不在外部js的顶部?我将一段代码包装为您的第二个示例代码,但people问题没有得到解决。如果您希望不发生冲突,则不应使用$(document).ready()在外部js文件的顶部。它们应该使用jQuery(document).ready()相反,@T.J.Crowder-请在更新我的问题后解释你的第二种方法。@metal gear solid:所以在#1和#2之间,你可以把我上面显示的内联脚本放在调用noConflict
的地方。然后你可以编辑example.js
将这些行放在上面和下面。如果你在自己的页面上使用任何脚本(与example.js
)分开,确保使用jQuery
,而不是$
@T.J.Crowder-您的意思是对于外部js,我们只需要将外部代码包装在这个(函数($){//external code})(jQuery)中;而且不需要用jquery替换$。@metal gear solid:应该可以,是的,因为他们代码中的$
将解析为匿名函数的参数,而不是全局参数。@@T.J.Crowder-但是如果外部代码直接从“var opbox=”“”开始,该怎么办?无论外部js中写了什么,您的技术都有效吗?
<script>
jQuery.noConflict();
(function($){
$(function(){
alert('code here');
});
})(jQuery);
</script>