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" onclick="$j.test()"/>
</body>
</html>
外面已经用var $j = jQuery.noConflict();定义了命名空间,而test.js里面仍然可以用$.所以开发组件时一定要把function写在(function($){})(jQuery);内已防止修改命名空间后组件需要大动

你可能感兴趣的:(jquery,jsp,框架,DWR,J#)