Zoeken…


Een klas toevoegen

Moderne browsers bieden een classList object om het klasse-attribuut van het element te kunnen manipuleren. Oudere browsers vereisen directe manipulatie van de eigenschap className van het element.

W3C DOM 4

Een eenvoudige methode om een klasse aan een element toe te voegen, is deze aan het einde van de eigenschap className toe te voegen. Dit voorkomt geen dubbele klassennamen en spaties moeten tussen klassennamen worden ingevoegd.

document.getElementById("link1").className += " foo";
document.getElementById("link2").className += " foo bar";

Voor meerdere elementen moet u de klassennamen in een lus toevoegen

var els = document.getElementsByClassName("foo"),
  indx = els.length;
while (indx--) {
  els[indx].className += " bar baz";
}
W3C DOM 4

Een enkele klassenaam kan als een string worden toegevoegd. Gebruik de spread-operator van ES6 om meerdere klassennamen toe te voegen:

document.querySelector("#link1").classList.add("foo");
document.querySelector("#link2").classList.add(...['foo', 'bar']);

Voor meerdere elementen moet u de klassennamen in een lus toevoegen

document.querySelectorAll(".foo").forEach(el => {
  el.classList.add(...['bar', 'baz']);
});

Een klasse verwijderen

Moderne browsers bieden een classList object om het klasse-attribuut van het element te kunnen manipuleren. Oudere browsers vereisen directe manipulatie van de eigenschap className van het element.

* Opmerking klassenamen worden niet opgeslagen in de eigenschap van het element in een bepaalde volgorde

W3C DOM 4

Het verwijderen van een klasse uit een element vereist een beetje manipulatie van de eigenschap className .

var toRemove = "bar",
  el = document.getElementById("link1");
el.className = el.className.replace(new RegExp("\\b" + toRemove + "\\b", "g"), "").trim();

Het verwijderen van meerdere klassennamen zou een lus vereisen. De overige voorbeelden zullen een functie gebruiken om het werk te isoleren

function removeClass(el, name) {
  name = name.split(/\s+/);
  var index = name.length,
    classes = el.className;
  while (index--) {
    classes = classes.replace(new RegExp("\\b" + name[index] + "\\b", "g"), "").trim();
  }
  el.className = classes;
}
var el = document.getElementById("link1");
removeClass(el, "bar baz");

Voor meerdere elementen met meerdere te verwijderen klassennamen zijn twee lussen nodig

function removeClass(els, name) {
  name = name.split(/\s+/);
  var regex, len,
    index = name.length;
  while (index--) {
    regex = new RegExp("\\b" + name[index] + "\\b", "g");
    len = els.length;
    while (len--) {
      els[len].className = els[len].className.replace(regex, "").trim();
    }
  }
}
var els = document.getElementsByTagName("a");
removeClass(els, "bar baz");
W3C DOM 4

Een enkele klassenaam kan als een string worden verwijderd. Gebruik de spread-operator van ES6 om meerdere klassennamen te verwijderen:

document.querySelector("#link1").classList.remove("foo");
document.querySelector("#link2").classList.remove(...['foo', 'bar']);

Voor meerdere elementen moet u de klassennamen in een lus verwijderen

document.querySelectorAll(".foo").forEach(el => {
  el.classList.remove(...['bar', 'baz']);
});

Testen voor een klas

Moderne browsers bieden een classList object om het klasse-attribuut van het element te kunnen manipuleren. Oudere browsers vereisen directe manipulatie van de eigenschap className van het element.

* Opmerking klassenamen worden niet opgeslagen in de eigenschap van het element in een bepaalde volgorde

W3C DOM 4

Testen of een element een klasse bevat, vereist een beetje manipulatie van de eigenschap className . In dit voorbeeld wordt een matrixmethode gebruikt om de klasse te testen.

function hasClass(el, name) {
  var classes = (el && el.className || "").split(/\s+/);
  return classes.indexOf(name) > -1;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));

Testen op meerdere klassennamen zou een lus vereisen.

function hasClass(el, name) {
  name = name.split(/[\s.]+/);
  var hasClass = true,
    classes = (el && el.className || "").split(/\s+/),
    index = name.length;
  while (index--) {
    hasClass = hasClass && classes.indexOf(name[index]) > -1;
  }
  return hasClass;
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));

In plaats van .indexOf() , kunt u ook overwegen een reguliere expressie te gebruiken.

function hasClass(el, name) {
  return new RegExp("\\b" + name+ "\\b").test(el.className);
}
var el = document.getElementById("link1");
console.log(hasClass(el, "foo"));
W3C DOM 4

Het testen voor een enkele klassenaam gebeurt als volgt:

var hasClass = document.querySelector("#link1").classList.contains("foo");

Voor namen van meerdere klassen is het eenvoudiger om matches te gebruiken. Let op het gebruik van de klassenkiezer; De selector kan elke geldige string-selector zijn (id, attribuut, pseudo-klassen, enz.).

var hasClass = document.querySelector("#link1").matches('.foo.bar');
var hasClass = document.querySelector("#link2").matches('a.bar[href]');


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow