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:
Objekt unterstützt diese Eigenschaft oder Methode nicht
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');
…Ebenfalls wenn Sie nur IE8+-Unterstützung benötigen dann geht das:
var tabs = document.getElementsByClassName('tab');
Bist du sicher, dass dein Update richtig ist? Sollte es nicht var tabs = getElementsByClassName(document.body,’tab’); **Beachte, dass ich document.getEle entfernt habe… **
– Antonius
23. Dezember 2012 um 18:01 Uhr
Sind Ihre letzten Beispiele richtig? Sie übergeben ‘.tab’, aber sollte es nicht ohne den Punkt sein, da Ihre innere Methode den Punkt hinzufügt und wenn es IE9 + ist, dann hat es auch keinen Punkt? Sollte es nicht var tabs = document.getElementsByClassName(‘tab’); sein? Und warum haben Sie ein “oder”, wenn die letzten beiden Beispiele gleich sind? Irgendetwas muss mir fehlen.
– BoBoCoding
21. April 2016 um 0:55 Uhr
@BoBoCoding behoben.
– Webdesigner
22. April 2016 um 10:55 Uhr
Siehe auch getElementsByClassName Polyfill Kern in Polyfill für getElementsByClassName für bestimmte Zwecke.
– Wadzim
2. April 2019 um 9:58 Uhr
Es ist keine Methode des Dokuments:
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;
}
tabs = getElementsByClassName(document.body,'tab'); // no document
Testen Sie auf jsFiddle.net oder auf Ihrem eigenen Server/Rechner?
– Jo
14. September 2011 um 3:59 Uhr
@inquisitive_web_developer – welchen Fehler bekommst du jetzt? Auf welcher Linie bricht es?
– nnnnn
14. September 2011 um 4:03 Uhr
Sie können die Funktion für ältere Browser erstellen
if (typeof document.getElementsByClassName!='function') {
document.getElementsByClassName = function() {
var elms = document.getElementsByTagName('*');
var ei = new Array();
for (i=0;i<elms.length;i++) {
if (elms[i].getAttribute('class')) {
ecl = elms[i].getAttribute('class').split(' ');
for (j=0;j<ecl.length;j++) {
if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
ei.push(elms[i]);
}
}
} else if (elms[i].className) {
ecl = elms[i].className.split(' ');
for (j=0;j<ecl.length;j++) {
if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) {
ei.push(elms[i]);
}
}
}
}
return ei;
}
}
Mike_OBrien
function getElementsByClassName(className) {
if (document.getElementsByClassName) {
return document.getElementsByClassName(className); }
else { return document.querySelectorAll('.' + className); } }
Ziemlich sicher, dass dies die gleiche Funktion wie Leonid ist, aber diese verwendet document.getElementsByClassName wann es kann.
kennebec
Sie können getElementsByClassName nicht wirklich replizieren, da es eine nodeList zurückgibt und sein Wert daher live ist und mit dem Dokument aktualisiert wird.
Sie können ein statisches Array von Elementen zurückgeben, die dieselben Klassennamen haben – aber es wird nicht „wissen“, wenn sich das Dokument ändert.
(Es braucht nicht allzu viele solcher Dinge, um eine Bibliothek schlank aussehen zu lassen …)
Bist du sicher, dass dein Update richtig ist? Sollte es nicht var tabs = getElementsByClassName(document.body,’tab’); **Beachte, dass ich document.getEle entfernt habe… **
– Antonius
23. Dezember 2012 um 18:01 Uhr
Sind Ihre letzten Beispiele richtig? Sie übergeben ‘.tab’, aber sollte es nicht ohne den Punkt sein, da Ihre innere Methode den Punkt hinzufügt und wenn es IE9 + ist, dann hat es auch keinen Punkt? Sollte es nicht var tabs = document.getElementsByClassName(‘tab’); sein? Und warum haben Sie ein “oder”, wenn die letzten beiden Beispiele gleich sind? Irgendetwas muss mir fehlen.
– BoBoCoding
21. April 2016 um 0:55 Uhr
@BoBoCoding behoben.
– Webdesigner
22. April 2016 um 10:55 Uhr
Siehe auch
getElementsByClassName
Polyfill Kern in Polyfill für getElementsByClassName für bestimmte Zwecke.– Wadzim
2. April 2019 um 9:58 Uhr