Який найкращий метод отримати масив елементів, що мають певний клас?
Я б використовував 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');