【问题标题】:Javascript not displaying in internet explorer 7 and 8 [duplicate]Javascript未在Internet Explorer 7和8中显示[重复]
【发布时间】:2014-02-18 12:37:36
【问题描述】:

这似乎在 ie7 和 ie8 中不起作用,有没有简单的解决方法?

  var collapsables = document.getElementsByClassName('collapsable');

function unhide(divID) {

  // Hide previous
  for (var i = 0; i < collapsables.length; i++) {
    collapsables[i].className = 'collapsable hidden';
  }

  // Show new
  var item = document.getElementById(divID);
  if (item) {
    item.className = 'collapsable';
  }
}

【问题讨论】:

标签: javascript internet-explorer


【解决方案1】:

我敢打赌这会被关闭,因为它很快就会重复,但Web_Designer 有一个很好的工作解决方案已发布here

IE9之前的IE版本的Web_Designers解决方案:

function getElementsByClassName(node, classname) {
    var a = [];
    var re = new RegExp('(^| )'+classname+'( |$)');
    var els = node.getElementsByTagName("*");
    for(var i=0,j=els.length; i<j; i++)
        if(re.test(els[i].className))a.push(els[i]);
    return a;
}

用法:

var tabs = getElementsByClassName(document.body,'collapsable');

【讨论】:

    【解决方案2】:

    尝试使用: var collapsables = document.querySelector('.collapsable');

    IE8 支持 querySelector

    但是如果你需要IE7,尝试使用dirty hack:

    if(document.getElementsByClassName == undefined) { 
       document.getElementsByClassName = function(cl) { 
          var retnode = []; 
          var myclass = new RegExp('\\b'+cl+'\\b'); 
          var elem = this.getElementsByTagName('*'); 
          for (var i = 0; i < elem.length; i++) { 
             var classes = elem[i].className; 
             if (myclass.test(classes)) { 
                retnode.push(elem[i]); 
             } 
          } 
          return retnode; 
       } 
    }; 
    

    你应该明白 - 这是一个非常缓慢的操作。该函数迭代所有 DOM 元素

    【讨论】:

    • 与本机方法相比速度较慢。但平均 300ops/sec 对我来说已经足够了。
    猜你喜欢
    • 2011-05-25
    • 2013-02-11
    • 1970-01-01
    • 2010-09-13
    • 2012-06-07
    • 2013-12-17
    • 1970-01-01
    • 2011-10-15
    • 2017-11-02
    相关资源
    最近更新 更多