getElementsByClassName() не работает в старых интернет-исследователях, таких как IE6, IE7, IE8

следующий код:

var borderTds = document.getElementsByClassName('leftborder');

дает мне сообщение об ошибке в Internet Explorer версии 6, 7 и 8:

объект не поддерживает этот метод

Как я могу выбрать элементы по их классу в этих браузерах?

Я предпочитаю не использовать JQuery.

5 ответов


этой решение может помочь. Это обычай getElementsByClassName функция реализована в чистом javascript, которая работает в IE.

по существу, что этот скрипт делает, это зондирование, один за другим, все возможные варианты и выбирает лучший из доступных. Эти параметры:

  1. уроженца

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;
}; 

метод не существует в 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;
}

демо:http://jsfiddle.net/kYdex/1/


Internet Explorer 8 и старше не поддерживает getElementsByClassName(). Если вам нужно только решение для IE8, оно поддерживает querySelectorAll(), вы можете использовать один из них вместо этого. Для более старых IEs вы должны предоставить свою собственную реализацию, а для некоторых других древних браузеров, которые ее поддерживают, вы также можете использовать evaluate() который запускает выражения XPath.

код предоставляет document.getElementsByClassName метод, если он еще не существует, используя методы, которым меня описание:

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;
  }
}

Если вам что-то не нравится, вы можете использовать свою любимую поисковую систему, чтобы найти другую.


Если getElementsByClassname не поддерживает ошибку в некоторых старых браузерах Просто попробовать var modal = документ.getElementById ('myModal'); модальный.функцию onclick= (){ Затем выполните функцию onclick или другую функцию с помощью getElementById модальный.стиль.display = " нет"; }