$()這個創意確實是從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
零全零美 閱讀(244)
評論(0) 編輯 收藏