Как лучше всего получить массив элементов определенного класса?
Я бы использовал document.getElementsByClassName, но IE его не поддерживает.
Поэтому я попробовал решение Джонатана Снука:
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 = document.getElementsByClassName(document.body,'tab');
... но IE по-прежнему говорит:
Объект не поддерживает это свойство или метод
Любые идеи, лучшие методы, исправления ошибок?
Я бы предпочел не использовать какие-либо решения, связанные с jQuery или другим «громоздким javascript».
Обновлять:
Я заставил его работать!
Как упомянул @joe, эта функция не является методом document
.
Таким образом, рабочий код будет выглядеть так:
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,'tab');
...Также, если вам нужна только поддержка IE8+, это будет работать:
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
return this.querySelectorAll("." + className);
};
Element.prototype.getElementsByClassName = document.getElementsByClassName;
}
Используйте его как обычно:
var tabs = document.getElementsByClassName('tab');
getElementsByClassName
polyfill суть в Полифилл для getElementsByClassName для определенных целей. - person Vadzim   schedule 02.04.2019