有没有比以下4个方法,更优雅的解决方案?
1、使用jQuery代替$. 如:jQuery.ajax();
缺点:不适合扩展,一旦替换成第三方库时,那就麻烦大发
2、使用jQuery.noConflict。 如:var j = jQuery.noConflict(); j.ajax();
缺点:当使用jQuery的相关插件时,会使得插件失效哦!
3、wrap jQuery中的冲突方法。
如$.ajax()在Velocity中会冲突,则重新定义如下:
function dw(){}
dw.ajax=function(s){ jQuery.ajax(s); } dw.ajax();
方案3基本上解决了1、2中的缺点~~~故推荐使用第三种方法!
4、
定义一个 $JQ="$."
以后可以用 ${JQ}ajax().......
(function($){})(jQuery);
可以解决大部分问题了。十秒钟以内没搜明白什么是velocity,好像这个叫Velocity.js的货怎么看也和
jQuery.ajax
没关系,先不管了如果冲突的是
$
这个名字,那么我认为正道应该就是1了,也就是jQuery.noConfilict()
,然后用jQuery,至于第三方库,如果第三方库连这个都不支持,还在依赖window.$
的话,我建议你强烈怀疑那个第三方库的作者的水准,尽量踢掉,实在不行就帮他包一层(function($){})(jQuery)
也就是一句话的事儿重头看一遍好像又有点像那个模板引擎的问题了。那么答案应该是在HTML里嵌入JS代码是邪路,醒醒吧少年
还有一种模块化的思想,使用 requirejs 或者 seajs 等模块加载器,将jQuery 和 你所说的 velocity作为一个模块加载即可。
例如 seajs官方快速上手的这个例子:http://seajs.org/docs/#quick-start