Wählen Sie und fügen Sie der Klasse in javascript
Cross-Plattform-falls möglich, wie kann ich wählen Sie Klassen in Javascript (aber nicht Jquery-bitte -MooTools ist gut, obwohl-) code, ich kann nicht fügen Sie eine ID?
Insbesondere möchte ich hinzufügen, dass die Klasse "cf" auf alle li unten:
HTML
<div class="itemRelated">
<ul>
<li class="even">
<li class="odd">
<li class="even">
Habe ich versucht zu hantieren, aber etwas fehlt:
Javascript
var list, i;
list = document.getElementsByClassName("even, odd");
for (i = 0; i < list.length; ++i) {
list[index].setAttribute('class', 'cf');
}
ps. Diese Frage phänomenal ist möglich Duplikate, (anderen ein), aber keine der Antworten deutlich macht.
- Interessieren Einhaltung in bestimmten IE-version?
- nicht genau eine bestimmte IE-version, nur zur Unterstützung moderner Browser und die bestmögliche Kombination von alten IE-Versionen. Ich hätte nichts dagegen, wenn IE6 oder IE7 werden nicht in Frage, zum Beispiel, aber wenn es etwas gibt, brauchbar, würde ich es nehmen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit plain javascript:
Demo
Für ältere Browser könnten Sie diese:
Demo
Mit Mootools:
Demo
oder wenn Sie wollen, um bestimmte, die durch die Klasse:
Demo
.addClass()
Raum und ist nicht gerade eine gute Idee - funktioniert, weil der code nicht geprüft, arg vergangen, aber bedingt classList ändern, werden abgelehnt - siehe github.com/mootools/mootools-core/commit/... - zu sehen, wie diese können einen negativen Effekt hier: jsfiddle.net/3EyzL.addClass
sollten keine doppelten Klassen, hinzufügen Platz entfernt, die Sicherheit.element.addClass('bar').addClass('foo');
die beste Lösung dann?Mit einigen neueren browser-Objekte und Methoden.
Reine JS:
Details: altmodische Weise, mit der Erklärung Zeug am beginging als Iteration in einer großen Schleife über die Elemente mit dem index 'i', keine große Wissenschaft hier. Eine Sache ist mit
classList
Objekt, das ein intelligenter Weg, um hinzufügen/entfernen/check-Klassen innerhalb von arrays.Reine JS - 2:
Details: - Dokument.querySelectorAll gibt ein array-artiges Objekt zugegriffen werden kann über Indizes hat aber keine Array-Methoden. Aufruf Scheibe von Array.Prototyp liefert ein array geholt Elemente, die sofort (wahrscheinlich der Schnellste NodeList -> Array-Konvertierung). Als Sie verwenden können, eine
.forEach
Methode auf neu erstellte array-Objekt.Reine JS - 3:
Details: dies ist ziemlich ähnlich, v2,
[].map
ist in etwa das gleiche wieArray.prototype.map
außer hier erklären Sie ein leeres array aufrufen der map-Methode. Es ist kürzer, aber mehr (ok etwas mehr) Speicher..map
Methode führt eine Funktion auf jedem element aus dem array und gibt ein neues array zurück (hinzufügen Rückkehr in innerhalb der Funktion würde dazu führen, füllen Sie die zurückgegebenen Werte, es ist hier unbenutzt).Wählen Sie ein, und verwenden 😉
querySelectorAll
unterstützt, IE8,getElementsByClassName
ist nicht, das nicht zwei Klassen gleichzeitig. Keiner von Ihnen arbeiten im iE7, aber who cares.Dann ist es nur eine Frage der Iteration und die Erweiterung der
className
Eigenschaft.GEIGE
Als andere erwähnen, die für die Auswahl der Elemente, die Sie verwenden sollten
.querySelectorAll()
Methode. DOM bietet auchclassList
API unterstützt das hinzufügen, entfernen und Umschalten Klassen:Wie immer in IE9 und Balg nicht unterstützt können Sie die API, wenn Sie möchten, unterstützt diese Browser können Sie ein shim verwenden, MDN hat ein.
Ich weiß, das ist alt, aber gibt es irgendeinen Grund, nicht einfach das (neben möglicher browser-support-Probleme)?
Unterstützung: https://caniuse.com/#feat=es5