Was ist die beste Methode, um ein Array von Elementen mit einer bestimmten Klasse abzurufen?
Ich würde document.getElementsByClassName verwenden, aber der IE unterstützt es nicht.
Also habe ich Jonathan Snooks Lösung ausprobiert :
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');
... aber IE sagt immer noch:
Object unterstützt diese Eigenschaft oder Methode nicht
Irgendwelche Ideen, bessere Methoden, Fehlerbehebungen?
Ich würde es vorziehen, keine Lösungen mit jQuery oder anderem "sperrigem Javascript" zu verwenden.
Aktualisieren:
Ich habe es zum Laufen gebracht!
Wie @joe erwähnte, ist die Funktion keine Methode von document
.
Der Arbeitscode würde also so aussehen:
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');
... Auch wenn Sie nur IE8 + -Unterstützung benötigen, funktioniert dies:
if(!document.getElementsByClassName) {
document.getElementsByClassName = function(className) {
return this.querySelectorAll("." + className);
};
Element.prototype.getElementsByClassName = document.getElementsByClassName;
}
Verwenden Sie es wie gewohnt:
var tabs = document.getElementsByClassName('tab');