大家都知道document.getElementById在ie和opera上面有错误的行为,会把input的name当做id来查找,$函数使用了getElementById所以自然在ie opera上可能和ff safari上面返回结果不一样,为了100%的cross-browser我写了个修正的$函数,为ie和opera各自写了个path,其实都是性能问题,不然$$("*[id="+id+"]").first()就解决了,$$的性能还是比不上native的函数的,ie的path比较复杂,初学不建议这么用,供大家参考吧
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')
{
var id=element;
element = document.getElementById(element);
var tmp=[];
var t=document.getElementById(id);
if (Prototype.Browser.IE)
{
while(t!=null && t.id!=id)
{
var e=t.outerHTML;
t.outerHTML=t.outerHTML.indexOf('name="')!=-1?
t.outerHTML.replace('name="'+t.name+'"','name="'+t.name
+'_tmp_"'):t.outerHTML.replace('name='+t.name,'name='+t.name+'_tmp_')
tmp.push([document.getElementById(t.name+"_tmp_"),e])
t=document.getElementById(id);
}
tmp.each(function(node){node[0].outerHTML=node[1]});
}
else if(Prototype.Browser.Opera)
{
while(t!=null && t.id!=id)
{
tmp.push([t,t.name])
t.name+="_tmp_";
t=document.getElementById(id);
}
tmp.each(function(node){node[0].name=node[1]});
}
element=t;
}
return Element.extend(element);
}