我正在开发一个我希望稍后发布的JavaScript新项目。除了其他功能外,此脚本还需要一些DOM操作。为了制作这个XB(跨浏览器)而不再发明轮子,我需要现有JavaScript库的帮助。由于有大量优秀的库,我不想强迫一个库用于这个项目。这就是为什么我希望在一个脚本中支持多个库。
了解我的jQuery,但其他库我没有足够的经验。 所以我想知道是否有一个教程或文章能够解释脚本中支持多个JavaScript库的问题?
我已经阅读过使用CSS选择器引擎(Sizzle,Selector.js,Peppy,NWMatcher,cssQuery)可能的相同内容,但我不了解JS。
答案 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)