免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 948 | 回复: 0
打印 上一主题 下一主题

奇特的Jquery与Prototype混合用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-19 15:48 |只看该作者 |倒序浏览

jQuery和prototype都是现在比较流行的Javascript开发框架,两者都拥有数量相当的粉丝,当然不排除同时喜欢使用两种框架的。但问题来了,由于jQuery以及prototype都使用了美元符函数“$”作为选择器,在两者混合使用的时候$函数被重复定义了,结果导致其中一个框架不能使用。
不过很快,有很多人给出了解决方案,如比较流行的方案是这样的:
   
      
     JQ = $;  //rename $ function  
   
   


      JQ = $;  //rename $ function

  
这样一来,你可以使用JQ来代替jQuery里的$函数名,而prototype的$函数照常使用,像这样:
   
  JQ(document).ready(function(){   
   JQ("#test_jquery").html("this is jquery");   
   $("test_prototype").innerHTML="this is prototype";   
  });   
     JQ(document).ready(function(){
     JQ("#test_jquery").html("this is jquery");
     $("test_prototype").innerHTML="this is prototype";
    });   
  
尽管这种办法在一定程度上解决了两者的冲突,但作为jQuery的死忠,我是万分不情愿改写$为JQ或其他替代的字符。反之Prototype的粉丝估计也会这样想。那么,是不是有另一种解决方案,让两种框架能和谐共处呢?现在流行和谐嘛!
另类解法:先看一小段代码,猜一下会有什么效果?
   
function(name){   
    alert('hello '+ name);   
})("world");   
   

(function(name){
     alert('hello '+ name);
     })("world");
   
应该很简单吧?效果是弹出一个窗品说“helloworld”。仔细看这一段Script,前后有两个括号组成,第一个括号里面是一个function对象,第二个括号是一个字符串。可以这样理解,第一个括号里面定义了一个函数,第二个括号里面给出的参数,两个加在一起实际上是完成了一次函数调用!
那现在来点真实的:
   
   
   
   
   
      
   
  
   
     
      
   
   
      
经测试,jQuery与Prototpye工作均正常。唯一以往常不一样的是,我们要在以前写的Jquery外面加多一个外套:
(function($){      
  //这里写Jquery代码
})(jQuery);   
(function($){
//这里写Jquery代码 })(jQuery);  
这个外套巧妙地利用函数局部变量的有效范围保证你可以安心地按原来的方式写Jquery代码,这个方案更合适现有Jquery的代码升级至Jquery + prototypt。
不足之处:
还是不能解决Jquery插件的问题,这个问题是传统方法也无法解决的,只能够手动去修改插件脚本里面对$的调用,而根本的解决办法是以后的插件都用刚才那种另类的方式去写,才能保证其可用性。而Jquery UI现在好像是这样做了,我从Demo的源码里面看到的。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/55983/showart_1424068.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP