Javascript getElementsByClassName()不';I don’我不能在像IE6、IE7、IE8这样的老网络探索者中工作

Javascript getElementsByClassName()不';I don’我不能在像IE6、IE7、IE8这样的老网络探索者中工作,javascript,internet-explorer-8,internet-explorer-7,internet-explorer-6,dom-traversal,Javascript,Internet Explorer 8,Internet Explorer 7,Internet Explorer 6,Dom Traversal,以下代码: var borderTds = document.getElementsByClassName('leftborder'); 在Internet Explorer 6、7和8中显示错误消息: 对象不支持此方法 如何在这些浏览器中按类选择元素 我不喜欢使用JQuery。该方法在IE6中不存在。如果您想按类选择元素,而不想使用库,只需遍历页面中的所有元素,并在其className属性中检查类 function getElementsByClassName(className) {

以下代码:

var borderTds = document.getElementsByClassName('leftborder');
在Internet Explorer 6、7和8中显示错误消息:

对象不支持此方法

如何在这些浏览器中按类选择元素


我不喜欢使用JQuery。

该方法在IE6中不存在。如果您想按类选择元素,而不想使用库,只需遍历页面中的所有元素,并在其
className
属性中检查类

function getElementsByClassName(className) {
  var found = [];
  var elements = document.getElementsByTagName("*");
  for (var i = 0; i < elements.length; i++) {
    var names = elements[i].className.split(' ');
    for (var j = 0; j < names.length; j++) {
      if (names[j] == className) found.push(elements[i]);
    }
  }
  return found;
}
函数getElementsByCassName(类名称){
发现的var=[];
var elements=document.getElementsByTagName(“*”);
对于(var i=0;i

演示:

IE6、Netscape 6+、Firefox和Opera 7+在页面中复制以下脚本:

document.getElementsByClassName = function(cl) {
  var retnode = [];
  var elem = this.getElementsByTagName('*');
  for (var i = 0; i < elem.length; i++) {
    if((' ' + elem[i].className + ' ').indexOf(' ' + cl + ' ') > -1) retnode.push(elem[i]);
  }
  return retnode;
}; 
document.getElementsByClassName=函数(cl){
var retnode=[];
var elem=this.getElementsByTagName('*');
对于(变量i=0;i-1)retnode.push(elem[i]);
}
返回节点;
}; 
这可能会有所帮助。这是一个用纯javascript实现的自定义函数,在IE中工作

基本上,这个脚本所做的是一个接一个地探测所有可能的选项,并选择可用的最佳选项。这些选择包括:

  • 原生
    document.getElementsByClassName
    函数
  • document.evaluate
    函数,该函数允许计算XPath查询
  • 遍历DOM树
  • 当然,从性能角度来看,第一个是最好的,但是后者应该在任何地方都可用,包括IE6

    页面上也提供了用法示例,如下所示:

    getElementsByClassName("col", "div", document.getElementById("container")); 
    
    因此,该函数允许3个参数:类(必需)、标记名(可选,如果未指定,则搜索所有标记)、根元素(可选,如果未指定,则搜索文档)


    更新。博客文章中链接的解决方案托管在谷歌代码上,该代码将于2016年1月关闭。然而,作者已经在上提供了它。很荣幸在评论中指出这一点。

    Internet Explorer 8及更早版本不支持。如果您只需要IE8的解决方案,它支持,您可以使用其中的一个。对于较旧的IE,您必须提供自己的实现,对于其他支持它的古老浏览器,您还可以使用运行XPath表达式的浏览器

    使用我描述的方法提供
    document.getElementsByCassName
    方法(如果该方法尚不存在):

    if (!document.getElementsByClassName) {
      document.getElementsByClassName = function(search) {
        var d = document, elements, pattern, i, results = [];
        if (d.querySelectorAll) { // IE8
          return d.querySelectorAll("." + search);
        }
        if (d.evaluate) { // IE6, IE7
          pattern = ".//*[contains(concat(' ', @class, ' '), ' " + search + " ')]";
          elements = d.evaluate(pattern, d, null, 0, null);
          while ((i = elements.iterateNext())) {
            results.push(i);
          }
        } else {
          elements = d.getElementsByTagName("*");
          pattern = new RegExp("(^|\\s)" + search + "(\\s|$)");
          for (i = 0; i < elements.length; i++) {
            if ( pattern.test(elements[i].className) ) {
              results.push(elements[i]);
            }
          }
        }
        return results;
      }
    }
    
    if(!document.getElementsByClassName){
    document.getElementsByClassName=函数(搜索){
    var d=文档、元素、模式、i、结果=[];
    if(d.queryselectoral){//IE8
    返回d.querySelectorAll(“.”+搜索);
    }
    如果(d.evaluate){//IE6,IE7
    pattern=“../*[包含(concat(“”,@class'),“+search+”)]”;
    元素=d.evaluate(模式,d,null,0,null);
    while((i=elements.iterateNext()){
    结果:push(i);
    }
    }否则{
    elements=d.getElementsByTagName(“*”);
    pattern=newregexp(“(^ |\\s)”+search+“(\\s |$)”;
    对于(i=0;i

    如果您不喜欢它的某些方面,您可以使用您最喜欢的搜索引擎来查找另一个。

    如果getElementsByClassname在某些旧浏览器中不支持is错误 试一试 var modal=document.getElementById('myModal'); modal.onclick=function(){ 然后使用getElementById执行任何单击函数或其他函数的操作 modal.style.display=“无”;
    }

    我认为jQuery支持这种功能。使用
    jQuery
    的另一种选择是只使用。但是,如果您只需要按类选择,那么我只需编写一个替换项。@chaospantion:“我不喜欢使用JQuery”。实际上,使用
    \b
    可能会导致包含
    -
    的类出现问题。最好添加空格:
    if(“”+elem[i].className+“”).indexOf(“”+cl+“”)>-1).
    。这就是jQuery使用的方法。我一直在IE6中工作。似乎IE6没有代码显示的.indexOf()。我必须做一个简单的替换函数:函数indexOf(Arr,Match){var Result=-1;var I;for(I=0;I