Javascript 如何定制无需编辑的防弹jquery的noconflict版本?

Javascript 如何定制无需编辑的防弹jquery的noconflict版本?,javascript,xhtml,jquery,Javascript,Xhtml,Jquery,在我的工作中,我总是需要将jquery与原型结合使用。我可以使用库文件创建任何自定义jquery,就像我将在head中添加的一样,然后不需要更改任何代码中的任何内容 可能吗 我不想将$code中的任何内容更改为jQuery。这就引出了一个问题:为什么不在Prototype中实现所有内容,或者在jQuery中实现所有内容。总的来说,它们都具有相同的功能 然而,要直接回答您的问题,实际上并没有一种方法可以定制jQuery的构建。但您可以简单地在包含jQuery库之后立即进行noConflict调用

在我的工作中,我总是需要将jquery与原型结合使用。我可以使用库文件创建任何自定义jquery,就像我将在head中添加的一样,然后不需要更改任何代码中的任何内容

可能吗


我不想将$code中的任何内容更改为jQuery。

这就引出了一个问题:为什么不在Prototype中实现所有内容,或者在jQuery中实现所有内容。总的来说,它们都具有相同的功能

然而,要直接回答您的问题,实际上并没有一种方法可以定制jQuery的构建。但您可以简单地在包含jQuery库之后立即进行noConflict调用

然后你可以把你的东西都包起来

(function($){
  // your jQuery code here... Can be used with $ as normal.
})(jQuery);
在这个函数中,您可以使用$作为别名,在它之外,您需要使用jQuery。这里唯一的问题是,如果您希望在这里定义的变量是全局变量,您需要手动将其设置为全局变量,因为其中的所有内容都将限定在函数的范围内。您可以这样做:

(function($){
  window.myGlobalVar = 'This is a global variable';
})(jQuery);

这就引出了一个问题:为什么不在Prototype中实现所有的东西,或者在jQuery中实现所有的东西呢。总的来说,它们都具有相同的功能

然而,要直接回答您的问题,实际上并没有一种方法可以定制jQuery的构建。但您可以简单地在包含jQuery库之后立即进行noConflict调用

然后你可以把你的东西都包起来

(function($){
  // your jQuery code here... Can be used with $ as normal.
})(jQuery);
在这个函数中,您可以使用$作为别名,在它之外,您需要使用jQuery。这里唯一的问题是,如果您希望在这里定义的变量是全局变量,您需要手动将其设置为全局变量,因为其中的所有内容都将限定在函数的范围内。您可以这样做:

(function($){
  window.myGlobalVar = 'This is a global variable';
})(jQuery);

保持简短

noConflict模式还有一点我在我的一些项目中发现很有用的功能:您可以选择一个不同的变量来代替标准的“jQuery”。用法如下所示:

var$j=jQuery.noConflict

现在除了使用默认的jQuery表示法外,我还可以使用更短的$j表示法。这使我能够避免遇到其他框架的问题,同时仍然享受代码中几乎相同的简洁性

保持简短

noConflict模式还有一点我在我的一些项目中发现很有用的功能:您可以选择一个不同的变量来代替标准的“jQuery”。用法如下所示:

var$j=jQuery.noConflict

现在除了使用默认的jQuery表示法外,我还可以使用更短的$j表示法。这使我能够避免遇到其他框架的问题,同时仍然享受代码中几乎相同的简洁性


最好的方法通常是将$封装在私有范围中:

(function($) {
    // jQuery stuff
})(jQuery)
还可以在换行之前调用jQuery.noConflict函数:

另一个干净的选项是将noConflict链接到domReady回调中:

jQuery.noConflict()(function($){
    // code using jQuery or $
});

console.log(typeof $ === 'undefined') // prints true

最好的方法通常是将$封装在私有范围中:

(function($) {
    // jQuery stuff
})(jQuery)
还可以在换行之前调用jQuery.noConflict函数:

另一个干净的选项是将noConflict链接到domReady回调中:

jQuery.noConflict()(function($){
    // code using jQuery or $
});

console.log(typeof $ === 'undefined') // prints true

要解决您是否可以拥有一个include once文件的问题,可以执行以下类似操作:

/* MyLibLoader.js */
document.write("<script type='text/javascript' src='prototype.js'></script>");
document.write("<script type='text/javascript' src='jquery.js'></script>");
window.$j = jQuery.noConflict();
然后是HTML

<head>
  <script type='text/javascript' src='MyLibLoader.js'></script>
</head>

但是这种方法假设您乐于将jQuery用法更改为$j,以解决您是否可以拥有一个include once文件的问题,是的,您可以执行类似于以下操作:

/* MyLibLoader.js */
document.write("<script type='text/javascript' src='prototype.js'></script>");
document.write("<script type='text/javascript' src='jquery.js'></script>");
window.$j = jQuery.noConflict();
然后是HTML

<head>
  <script type='text/javascript' src='MyLibLoader.js'></script>
</head>

但是这种方法假设您乐于将jQuery用法更改为$j

,这种方法当然也适用,但是您需要将所有调用更改为$j到$j。这是我做任何事情的方式,但如果您从一开始就这样做,显然是最简单的。在我看来,这是最好的方法,因为你还可以对将来可能使用$的任何其他库进行未来验证。这种方法肯定也适用,但是你需要将所有调用更改为$到$j。这是我做任何事情的方式,但如果你从一开始就这样做,显然是最简单的。在我看来,这是最好的方法,因为您还需要对将来可能包含的任何可能使用$的其他库进行验证。对于第二个选项,您是否需要将jQuery作为参数$传入,以便在anon函数中使用$别名?以前从未见过这样做…你是对的,如果你想使用$inside,你应该将它作为参数传递。更正。对于第二个选项,您是否需要将jQuery作为参数$传入,以便在anon函数中使用$alias?以前从未见过这样做…你是对的,如果你想使用$inside,你应该将它作为参数传递。更正。