jquery自定义插件命名空间问题

最近项目用到jquery和DWR,此两个框架一起用会出现冲突,解决的方法很简单。给jquery加上命名空间,如:var $j = jQuery.noConflict();以后jquery中在用到$的地方都用$j取代,这样就不会和dwr中的$冲突了。
这个问题解决了,另外一个问题却来了,如果我用$j定义,这样的话,我的js文件中所有的jquery的$地方都需要改成$j,如果一个只有两个还好,如果真有个几十个或者几百个,这简直是个噩梦。于是想到jquery官方插件中里面的(如blockui).js文件中里面也都用了$,而改变其命名空间后却不用更改其js文件中的$,很好奇他是怎么做的看了看源码,发现有这样的一句话
(function($){
.....
})(jQuery);

在此function中的方法会在加载js文件时候就会调用function($)中的$是形参,而(jQuery)是实参,jQuery是jquery.js中的全局变量,实际上就代表$.所以说即使在外面(jsp或HTML)声明了var $j = jQuery.noConflict();组件js里面的$也不会受到影响

例子如下:test.js
(function($){
$.test=function(){
alert("11");
$("#aa")[0].value="1111111";
}
})(jQuery);


主文件html如下:
<html>
<head>
<script src="jquery.js" type="text/javascript"></script>
<script src="test.js" type="text/javascript"></script>
<script>
var $j = jQuery.noConflict();
function test1111(){

}
</script>
</head>
<body>
<input type=="text" value="" id="aa"/>
<input type="button" value="ttt" οnclick="$j.test()"/>
</body>
</html>
外面已经用var $j = jQuery.noConflict();定义了命名空间,而test.js里面仍然可以用$.所以开发组件时一定要把function写在(function($){})(jQuery);内已防止修改命名空间后组件需要大动
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值