3379 Stimmen

Wie kann ich die Klasse eines Elements mit JavaScript ändern?

Wie kann ich die Klasse eines HTML-Elements als Reaktion auf eine onclick oder andere Ereignisse mit JavaScript?

32 Stimmen

"Das class-Attribut wird meist verwendet, um auf eine Klasse in einem Stylesheet zu verweisen. Es kann jedoch auch von einem JavaScript (über das HTML-DOM) verwendet werden, um Änderungen an HTML-Elementen mit einer bestimmten Klasse vorzunehmen." - w3schools.com/tags/att_standard_class.asp

24 Stimmen

element.setAttribute(name, value); Ersetzen Sie name con class . Ersetzen Sie value mit dem Namen, den Sie der Klasse gegeben haben, eingeschlossen in Anführungszeichen. Dadurch wird vermieden, dass Sie die aktuelle Klasse löschen und eine andere hinzufügen müssen. Dies jsFiddle-Beispiel zeigt einen vollständig funktionierenden Code.

4 Stimmen

Um eine Klasse eines HTML-Elements mit onClick zu ändern, verwenden Sie diesen Code: <input type='button' onclick='addNewClass(this)' value='Create' /> und im Abschnitt javascript: function addNewClass(elem){ elem.className="newClass"; } Online

60voto

PseudoNinja Punkte 2777

Verwendung von reinem JavaScript-Code:

function hasClass(ele, cls) {
    return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
}

function addClass(ele, cls) {
    if (!this.hasClass(ele, cls)) ele.className += " " + cls;
}

function removeClass(ele, cls) {
    if (hasClass(ele, cls)) {
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
        ele.className = ele.className.replace(reg, ' ');
    }
}

function replaceClass(ele, oldClass, newClass){
    if(hasClass(ele, oldClass)){
        removeClass(ele, oldClass);
        addClass(ele, newClass);
    }
    return;
}

function toggleClass(ele, cls1, cls2){
    if(hasClass(ele, cls1)){
        replaceClass(ele, cls1, cls2);
    }else if(hasClass(ele, cls2)){
        replaceClass(ele, cls2, cls1);
    }else{
        addClass(ele, cls1);
    }
}

44voto

4 Aktionen möglich: Hinzufügen, Entfernen, Prüfen und Umschalten

Für jede Aktion gibt es mehrere Möglichkeiten.

1. Klasse hinzufügen

Methode 1: Der beste Weg, eine Klasse in einem modernen Browser hinzuzufügen, ist die Verwendung von classList.add() Methode des Elements.

  • Fall 1 : Hinzufügen einer einzelnen Klasse

    function addClass() {
      let element = document.getElementById('id1');
    
      // adding class
      element.classList.add('beautify');
    }
  • Fall 2 : Hinzufügen mehrerer Klassen

    Um mehrere Klassen hinzuzufügen, trennen Sie die Klassen durch ein Komma im Feld add() Methode

    function addClass() {
      let element = document.getElementById('id1');
    
      // adding multiple class
      element.classList.add('class1', 'class2', 'class3');
    }

Methode 2 - Sie können auch Klassen zu HTML-Elementen hinzufügen, indem Sie className Eigentum.

  • Fall 1 : Überschreiben bereits existierender Klassen Wenn Sie eine neue Klasse dem className Eigenschaft überschreibt sie die vorherige Klasse.

    function addClass() {
      let element = document.getElementById('id1');
    
      // adding multiple class
      element.className = 'beautify';
    }
  • Fall 2 : Hinzufügen einer Klasse ohne Überschreiben verwenden += Operator für die Klasse, um vorherige Klassen nicht zu überschreiben. Fügen Sie außerdem ein zusätzliches Leerzeichen vor der neuen Klasse ein.

    function addClass() {
      let element = document.getElementById('id1');
    
      // adding single multiple class
      element.className += ' beautify';
      // adding multiple classes
      element.className += ' class1 class2 class3';
    }

2. Klasse entfernen

Methode 1 - Der beste Weg, eine Klasse aus einem Element zu entfernen, ist classList.remove() Methode.

  • Fall 1 : Einzelne Klasse entfernen

    Übergeben Sie einfach den Klassennamen, den Sie aus dem Element entfernen möchten, in der Methode.

    function removeClass() {
      let element = document.getElementById('id1');
    
      // removing class
      element.classList.remove('beautify');
    }
  • Fall 2 : Mehrere Klassen entfernen

    Übergeben Sie mehrere Klassen durch ein Komma getrennt.

    function removeClass() {
      let element = document.getElementById('id1');
    
      // removing class
      element.classList.remove('class1', 'class2', 'class3');
    }

Methode 2 - Sie können die Klasse auch mit className Methode.

  • Fall 1 : Entfernen einer einzelnen Klasse Wenn das Element nur 1 Klasse hat und Sie diese entfernen wollen, dann weisen Sie einfach einen leeren String dem className Methode.

    function removeClass() {
      let element = document.getElementById('id1');
    
      // removing class
      element.className = '';
    }
  • Fall 2 : Entfernen mehrerer Klassen Wenn das Element mehrere Klassen hat, werden zuerst alle Klassen aus dem Element entfernt, indem className Eigenschaft und verwenden Sie die replace-Methode und ersetzen Sie die gewünschten Klassen durch eine leere Zeichenkette und weisen Sie diese schließlich den Element]s className Eigentum.

    function removeClass() {
      let element = document.getElementById('id1');
    
      // removing class
      element.className = element.className.replace('class1', '');
    }

3. Kontrolle der Klasse

Um zu prüfen, ob eine Klasse in einem Element vorhanden ist, können Sie einfach Folgendes verwenden classList.contains() Methode. Sie liefert true wenn die Klasse existiert, sonst wird false zurückgegeben.

function checkClass() {
  let element = document.getElementById('id1');

  // checking class
  if(element.classList.contains('beautify') {
      alert('Yes! class exists');
  }
}

4. Klasse umschalten

Um eine Klasse umzuschalten, verwenden Sie classList.toggle() Methode.

function toggleClass() {
    let element = document.getElementById('id1');

    // toggle class
    element.classList.toggle('beautify');
}

40voto

Das funktioniert bei mir:

function setCSS(eleID) {
    var currTabElem = document.getElementById(eleID);

    currTabElem.setAttribute("class", "some_class_name");
    currTabElem.setAttribute("className", "some_class_name");
}

0 Stimmen

Ausgezeichnete Antwort! Nur noch hinzuzufügen: Setzen Sie für jede CSS-Klasse Namen für Selektor, um einen Stil für eine Gruppe von Elementen Klasse angeben

0 Stimmen

Dies funktioniert für mich auf FF, aber wenn ich versucht habe, el.className = "newStyle" zu verwenden; es hat nicht funktioniert, warum?

1 Stimmen

Sie können verwenden el.setAttribute('class', newClass) oder besser el.className = newClass . Aber nicht el.setAttribute('className', newClass) .

28voto

moka Punkte 22286

Sie können auch das HTMLElement-Objekt erweitern, um Methoden zum Hinzufügen, Entfernen, Umschalten und Prüfen von Klassen hinzuzufügen ( . ):

HTMLElement = typeof(HTMLElement) != 'undefiend' ? HTMLElement : Element;

HTMLElement.prototype.addClass = function(string) {
  if (!(string instanceof Array)) {
    string = string.split(' ');
  }
  for(var i = 0, len = string.length; i < len; ++i) {
    if (string[i] && !new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)').test(this.className)) {
      this.className = this.className.trim() + ' ' + string[i];
    }
  }
}

HTMLElement.prototype.removeClass = function(string) {
  if (!(string instanceof Array)) {
    string = string.split(' ');
  }
  for(var i = 0, len = string.length; i < len; ++i) {
    this.className = this.className.replace(new RegExp('(\\s+|^)' + string[i] + '(\\s+|$)'), ' ').trim();
  }
}

HTMLElement.prototype.toggleClass = function(string) {
  if (string) {
    if (new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className)) {
      this.className = this.className.replace(new RegExp('(\\s+|^)' + string + '(\\s+|$)'), ' ').trim();
    } else {
      this.className = this.className.trim() + ' ' + string;
    }
  }
}

HTMLElement.prototype.hasClass = function(string) {
  return string && new RegExp('(\\s+|^)' + string + '(\\s+|$)').test(this.className);
}

Und dann einfach wie folgt verwenden (auf Klick wird die Klasse hinzugefügt oder entfernt):

document.getElementById('yourElementId').onclick = function() {
  this.toggleClass('active');
}

Hier ist Demo .

1 Stimmen

Dies ist ein wenig langatmig...hier ist eine sehr knappe Lösung... jsfiddle.net/jdniki/UaT3P

5 Stimmen

Tut mir leid, @Jackson_Sandland, aber Sie haben den Punkt völlig verfehlt, der darin besteht, jQuery überhaupt nicht zu verwenden.

24voto

Ben Flynn Punkte 17854

Nur um Informationen von einem anderen beliebten Framework, Google Closures, hinzuzufügen, siehe deren dom/classes Klasse:

goog.dom.classes.add(element, var_args)

goog.dom.classes.addRemove(element, classesToRemove, classesToAdd)

goog.dom.classes.remove(element, var_args)

Eine Möglichkeit, das Element auszuwählen, ist die Verwendung von goog.dom.query mit einem CSS-3-Selektor:

var myElement = goog.dom.query("#MyElement")[0];

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X