Javascript 将noConflict()与jquery库一起使用
我使用jquery脚本作为下拉菜单,使用jquery脚本作为图像查看器。这两个库发生冲突 下面的脚本是我的库,我注意到了两个相互冲突的脚本。第一个块位于脚本的标题中,第二个块位于标记之前(这是图像滑块脚本工作的唯一方式)Javascript 将noConflict()与jquery库一起使用,javascript,jquery,libraries,conflict,Javascript,Jquery,Libraries,Conflict,我使用jquery脚本作为下拉菜单,使用jquery脚本作为图像查看器。这两个库发生冲突 下面的脚本是我的库,我注意到了两个相互冲突的脚本。第一个块位于脚本的标题中,第二个块位于标记之前(这是图像滑块脚本工作的唯一方式) //初始化没有自定义选项的插件 $(文档).ready(函数(){ //没有设置任何选项 $(“div#makeMeScrollable”).smoothDivScroll({ manualContinuousScrolling:正确, 自交共线性模式:“”, 可见热点背景:
//初始化没有自定义选项的插件
$(文档).ready(函数(){
//没有设置任何选项
$(“div#makeMeScrollable”).smoothDivScroll({
manualContinuousScrolling:正确,
自交共线性模式:“”,
可见热点背景:“始终”
});
});
我尝试了以下两个脚本,第一个脚本不解决冲突,第二个脚本导致页面无法加载(这是一个空白页面,只显示背景色)。有可能是我使用的脚本不正确
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
var $j = jQuery.noConflict();
// $j is now an alias to the jQuery function; creating the new alias is optional.
$j(document).ready(function() {
$j( "div" ).hide();
});
// The $ variable now has the prototype meaning, which is a shortcut for
// document.getElementById(). mainDiv below is a DOM element, not a jQuery object.
window.onload = function() {
var mainDiv = $( "main" );
}
</script>
var$j=jQuery.noConflict();
//$j现在是jQuery函数的别名;创建新别名是可选的。
$j(文档).ready(函数(){
$j(“div”).hide();
});
//$变量现在具有原型含义,这是
//document.getElementById()。下面的mainDiv是一个DOM元素,而不是jQuery对象。
window.onload=函数(){
var mainDiv=$(“主”);
}
脚本2:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) {
// You can use the locally-scoped $ in here as an alias to jQuery.
$( "div" ).hide();
});
// The $ variable in the global scope has the prototype.js meaning.
window.onload = function(){
var mainDiv = $( "main" );
}
</script>
jQuery.noConflict();
jQuery(文档).ready(函数($){
//您可以在这里使用本地范围的$作为jQuery的别名。
$(“div”).hide();
});
//全局范围中的$variable具有prototype.js的含义。
window.onload=函数(){
var mainDiv=$(“主”);
}
我不知道第一个例子中“不解决冲突”是什么意思。但在第二个例子中,你确定它实际上工作得不完美吗?您可以在那里编写代码,以便在文档准备就绪后立即隐藏整个页面上的所有div($(“div”).hide();
)。这很可能会导致页面除了背景色之外看起来是空的。这太可怕了,请尽量保持最小的顺序,您只需要包含一次jQuery。您知道您包含了两次完全相同版本的jQuery UI吗?@lvaroG.Vicario请注意名称中的.custom.
。它可能是两个不同的“自定义”ui版本。你可以只包含你想要的组件。你试过$(function($)({var mainDiv=$(“main”);})吗?那些库真的需要不同版本的jQuery吗?如果是这样,你真的应该删除使用旧版本的库。我抓到了noConflict()来自网站的代码,我实际上不知道它是做什么的。你能解释一下脚本中发生了什么,我如何改变它,使两个库一起工作,而不是让所有的东西都消失吗?啊,我明白了。noConflict()函数删除了它与变量“$”的关联因此,您可以使用其他库尝试将某些内容分配给“$”(或者,您可以在同一页上使用多个jQuery版本,但这并不推荐)。因此,您可以使用函数的返回值来分配新变量,而不是$,或者您可以在使用“$”的任何位置使用“jQuery”。或者,正如示例代码所示,您可以使用一个局部作用域,其中jQuery对象作为“$”传递到一个方法中。但是,当使用noConflict()时,我更喜欢不使用$作为变量,因为它使读取代码变得非常混乱-人们倾向于使用“$”为了始终引用jQuery对象,而不是到处更改其含义。因此,我应该将noConflict()代码改为“jQuery”而不是“$”?这会如何更改任何内容?发生了什么(假设这里确实存在冲突,我不知道prototype.js),这两个库都在为名为“$”的变量赋值。最简单的解决方案是加载prototype.js,然后加载jquery.js,然后调用jquery.noConflict();
使jquery避免使用“$”,因此从那时起“$”不再引用jquery对象。从那时起,凡是通常使用“$”引用jquery对象的地方,请使用“jquery”相反,prototype可能与此不冲突。(即使没有noConflict(),也可以这样做,因为“$”只是“jQuery”的简写形式)
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) {
// You can use the locally-scoped $ in here as an alias to jQuery.
$( "div" ).hide();
});
// The $ variable in the global scope has the prototype.js meaning.
window.onload = function(){
var mainDiv = $( "main" );
}
</script>