$()这个创意确实是从Protoype偷来的,但是Protoype是不是原创,那我就无从得知了。
util.js中$()的实现如下:
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中的实现:
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以上的支持!
posted on 2008-04-19 20:40
零全零美 阅读(240)
评论(0) 编辑 收藏