DWR中的JS(1)-----$()

本文对比分析了DWR与Prototype两种JavaScript库中$()方法的实现方式及其兼容性策略。揭示了不同浏览器环境下(如IE与Mozilla)获取DOM元素的不同处理方式,并讨论了document.getElementById与document.all的区别及潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$()这个创意确实是从Protoype偷来的,但是Protoype是不是原创,那我就无从得知了。
util.js中$()的实现如下:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->var $;
if (!$) {
  $ 
= dwr.util.byId;
}

if (document.getElementById) {
  dwr.util.byId 
= function() {
    
var elements = new Array();
    
for (var i = 0; i < arguments.length; i++) {
      
var element = arguments[i];
      
if (typeof element == 'string') {
        element 
= document.getElementById(element);
      }
      
if (arguments.length == 1) {
        
return element;
      }
      elements.push(element);
    }
    
return elements;
  };
}
else if (document.all) {
  dwr.util.byId 
= function() {
    
var elements = new Array();
    
for (var i = 0; i < arguments.length; i++) {
      
var element = arguments[i];
      
if (typeof element == 'string') {
        element 
= document.all[element];
      }
      
if (arguments.length == 1) {
        
return element;
      }
      elements.push(element);
    }
    
return elements;
  };
}
同样的代码为什么要写两遍呢?就算Mozilla浏览器不支持document.all,难道IE下就不能使用document.getElementById吗?再看:Protoype中的实现:
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->function $(element) {
  
if (arguments.length > 1) {
    
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    
return elements;
  }
  
if (typeof element == 'string')
    element 
= document.getElementById(element);
  
return Element.extend(element);
}
两下相比,好像DWR并不比老师高招啊。而DWR文档上的说法是这样可以让更多的浏览器支持!!!document.getElementById()不是ECMA公布的标准吗?

    有点晕,刚才GOOGLE了一下,却发现了这篇文章http://www.cnblogs.com/xiang/archive/2005/10/08/250273.html,一试之下果然如此,看来真的要郑重的对待document.getElementById()和document.all了。
    这篇文章大致是说:在IE中,如果有一个HTML标签的name属性和id属性的值相同,那么document.getElementById抓到的是那个name,而不是id。
    还有就是:
document.getElementById IE5.0以下的不支持!
document.all IE4.0以上的支持!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值