登录

javascript - 如何优雅的解决velocity与jquery的冲突

有没有比以下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().......


# JavaScript
天蓬老师天蓬老师2178 天前407 次浏览

全部回复(4) 我要回复

  • 巴扎黑

    巴扎黑2017-04-10 14:27:42

    (function($){})(jQuery);可以解决大部分问题了。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-10 14:27:42

    十秒钟以内没搜明白什么是velocity,好像这个叫Velocity.js的货怎么看也和jQuery.ajax没关系,先不管了

    如果冲突的是$这个名字,那么我认为正道应该就是1了,也就是jQuery.noConfilict(),然后用jQuery,至于第三方库,如果第三方库连这个都不支持,还在依赖window.$的话,我建议你强烈怀疑那个第三方库的作者的水准,尽量踢掉,实在不行就帮他包一层(function($){})(jQuery)也就是一句话的事儿

    重头看一遍好像又有点像那个模板引擎的问题了。那么答案应该是在HTML里嵌入JS代码是邪路,醒醒吧少年

    回复
    0
  • PHPzhong

    PHPzhong2017-04-10 14:27:42

    还有一种模块化的思想,使用 requirejs 或者 seajs 等模块加载器,将jQuery 和 你所说的 velocity作为一个模块加载即可。

    例如 seajs官方快速上手的这个例子:http://seajs.org/docs/#quick-start

    回复
    0
  • PHPzhong

    PHPzhong2017-04-10 14:27:42

    ;(function($){
        $(function(){
            //...
        })
    })(jQuery)
    

    回复
    0
  • 取消回复发送