JS:如何使document.getElementById跨浏览器?

时间:2009-12-22 10:57:13

标签: javascript html dom

document.getElementById 似乎并不适用于所有浏览器(我的意思是一些旧的浏览器),我确信有些开发人员并不知道这一点。

您建议使用哪种解决方案进行跨浏览?

由于

4 个答案:

答案 0 :(得分:9)

如果document.getElementById不起作用,则:

  • 你做错了(无效的HTML,尝试访问名称而不是ID等)

  • 您正在使用Netscape 4.x和Internet Explorer 4.x

有三种方法可以处理这个时代的浏览器。

  • 告诉人们升级。对于用户和作者来说,它们都是无法维护的,安全漏洞的噩梦。
  • Build on stuff that works并确保您的JS在尝试使用它们之前检查getElementById和朋友的存在(if (!document.getElementById) { return false; /* Insufficient DOM to bother with JS here */ }
  • 了解document.alldocument.layers

答案 1 :(得分:4)

你确定它不是this kind of problem吗?看看它有趣,我以前不知道。

然而,为了补充David Dorward已经建议的内容,你可以编写如下函数。

function getElement (id) {

  if (document.getElementById) {
    return document.getElementById(id);
  }

  else if (document.all) {
    return window.document.all[id];
  }

  else if (document.layers) {
    return window.document.layers[id];
  }
} 

答案 2 :(得分:1)

getElemID(obj){

if(document.getElementByID){
 return document.getElementByID(obj);
}

 else if (document.all){
  return document.all[obj];
  }

  else if (document.layers){
     return  document.layers[obj];
     }

  else {
       alert("Could not find support");
       return false;
       }
}

答案 3 :(得分:0)

function getDOM() {
    if (document.getElementById) {
        return document.getElementById; 
    }

    var window_document = window.document || {};
    var elements = window_document.all || window_document.layers;
    if(elements) {
        return function(x) { return elements[x]; }
    }

    // everything failed
    throw new InternalError('No means to "getElementById"');
}

......然后

var getElementById;
try {
    getElementById = getDOM();
} catch(err) {
    alert(err);
}
// implicit 0K
var oHTMLElement = getElementById('#main');