在一个脚本中支持多个JavaScript库

时间:2010-01-11 22:42:02

标签: javascript

我正在开发一个我希望稍后发布的JavaScript新项目。除了其他功能外,此脚本还需要一些DOM操作。为了制作这个XB(跨浏览器)而不再发明轮子,我需要现有JavaScript库的帮助。由于有大量优秀的库,我不想强​​迫一个库用于这个项目。这就是为什么我希望在一个脚本中支持多个库

了解我的jQuery,但其他库我没有足够的经验。 所以我想知道是否有一个教程或文章能够解释脚本中支持多个JavaScript库的问题

我已经阅读过使用CSS选择器引擎(Sizzle,Selector.js,Peppy,NWMatcher,cssQuery)可能的相同内容,但我不了解JS。

3 个答案:

答案 0 :(得分:3)

好吧,使用jQuery,您可以使用$ .noConflict()函数从全局命名空间中删除'$'和'jQuery'变量,以防止在页面的其他部分使用其他版本的jQuery或其他版本时可能出现的问题声明'$'变量的库。

这是一个简单的例子......

<script src="/path/to/jquery.min.js" type="text/javascript"></script>
<!-- load plugins you require here -->
<script type="text/javascript">

var myUniquelyNamedVar = {};
myUniquelyNamedVar.jQuery = $.noConflict(true);  // de-aliases jQuery, but gives you a private reference (if you need it)

(function($) {
    // use an anonymous function and pass in your private jQuery instance;  inside this function you can use $ like normal...
})(myUniquelyNamedVar.jQuery);
</script>

我已经将这种方法用于JSR-168 portlet并取得了巨大成功。它允许我在页面上有几个portlet,每个portlet可以使用不同版本的jQuery或不同的插件。

答案 1 :(得分:1)

我不认为有很多共同的框架类似于足以有用地抽象它们。尽可能坚持常规DOM。

关于唯一有用的,可重用的操作我可以想到很多框架以类似的方式提供的选择器引擎。如下所示:

function querySelectorAll(selector) {
    if ('querySelectorAll' in document)
        return document.querySelectorAll(selector);  // native Selectors-API is best
    if ('jQuery' in window)
        return jQuery(selector);  // returns a wrapper object, but it's enough like an array
    if ('$$' in window)
        return $$(selector);  // prototype
    if ('YAHOO' in window && 'util' in YAHOO && 'Selector' in YAHOO.util)
        return YAHOO.util.Selector.query(selector);  // yui
    // others?
    throw 'No selector engine found';
}

答案 2 :(得分:0)

关于this page的第二条评论提供了一个有趣的答案:Swiss - 一个JavaScript框架框架。