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

时间:2010-01-25 12:21:22

标签: javascript xhtml jquery

在我的工作中我总是必须使用jquery with prototype我可以使用库文件制作任何自定义jquery,就像我将添加头部,然后无需更改任何代码中的任何内容。

有可能吗?

我不想将代码$中的任何内容更改为jQuery

4 个答案:

答案 0 :(得分:3)

这就引出了一个问题:为什么不简单地在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);

答案 1 :(得分:3)

来自http://www.cssnewbie.com/runing-jquery-with-other-frameworks-via-noconflict/

  

保持简短

     

noConflict模式确实还有一些我在一些项目中发现有用的功能:你可以选择一个不同的变量而不是标准的“jQuery”。用法如下:

     

var $ j = jQuery.noConflict();

     

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

答案 2 :(得分:0)

最好的事情通常是将$包装在私有范围内:

(function($) {
    // jQuery stuff
})(jQuery)

您还可以在换行前调用jQuery.noConflict()函数:http://api.jquery.com/jQuery.noConflict/

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

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

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

答案 3 :(得分:0)

要解决您是否可以拥有“包含一次”文件的问题,是的,您可以执行类似的操作:

/* 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