Wie bekomme ich Element nach Klasse in JavaScript?

Lesezeit: 5 Minuten

Wie bekomme ich Element nach Klasse in JavaScript
Taylor

Ich möchte den Inhalt in einem HTML-Element ersetzen, also verwende ich dafür die folgende Funktion:

function ReplaceContentInContainer(id,content) {
   var container = document.getElementById(id);
   container.innerHTML = content;
}

ReplaceContentInContainer('box','This is the replacement text');

<div id='box'></div>

Das obige funktioniert großartig, aber das Problem ist, dass ich mehr als ein HTML-Element auf einer Seite habe, deren Inhalt ich ersetzen möchte. Ich kann also keine IDs, sondern Klassen verwenden. Mir wurde gesagt, dass Javascript keine Art von eingebautem Get-Element nach Klassenfunktion unterstützt. Wie kann also der obige Code überarbeitet werden, damit er mit Klassen statt mit IDs funktioniert?

PS Ich möchte jQuery dafür nicht verwenden.

1647275108 338 Wie bekomme ich Element nach Klasse in JavaScript
Randy der Entwickler

Dieser Code sollte in allen Browsern funktionieren.

function replaceContentInContainer(matchClass, content) {
    var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if((' ' + elems[i].className + ' ').indexOf(' ' + matchClass + ' ')
                > -1) {
            elems[i].innerHTML = content;
        }
    }
}

Die Funktionsweise besteht darin, alle Elemente im Dokument zu durchlaufen und deren Klassenliste zu durchsuchen matchClass. Wenn eine Übereinstimmung gefunden wird, wird der Inhalt ersetzt.

jsFiddle-Beispiel mit Vanilla JS (dh kein Framework)

  • +1 – Guter Fang mit den Leerzeichen, das vergesse ich immer … werde das für meine Antwort stehlen;) Klasse ist jedoch ein reserviertes Wort in Javascript; Sie sollten es nicht für einen Variablennamen verwenden, obwohl es (noch) nicht wirklich schadet.

    – Dagg Nabbit

    28. September 2010 um 0:36 Uhr


  • @no mit dieser Funktion müssen Sie keinen Inhalt in dem Element haben, das Sie ersetzen möchten. Sie können eine Zeichenfolge darin haben oder Sie können sie leer haben. In jedem Fall erscheint dort plötzlich der Ersetzungstext, wenn die Funktion aufgerufen wird.

    – Taylor

    28. September 2010 um 0:47 Uhr

  • Andrew, @no – Verwenden class da ein Variablenname in Safari nicht funktioniert, hat er derzeit Auswirkungen.

    – Benutzer113716

    28. September 2010 um 0:50 Uhr

  • Das von getElementsBytagName zurückgegebene Array hat auch eine length-Eigenschaft, für die dann auch der className/indexOf-Test durchgeführt wird. Obwohl dies in diesem Fall kein Problem darstellt, wäre eine reguläre for-Schleife korrekter.

    – Wolfgang Stengel

    6. März 2013 um 15:56 Uhr

  • statt indexOf mit Leerzeichen speichern elems[i].className hinein, sagen wir var cn und verwenden cn && cn.match(new RegExp("(^|\\s)" + matchClass + "(\\s|$)")) würde besser funktionieren, da es mit jedem Leerzeichen (Leerzeichen, geschütztes Leerzeichen, Tabulatoren usw.) übereinstimmt und gleichzeitig die Übereinstimmung mit den ersten/letzten Klassennamen ermöglicht. Beispiel: jsfiddle.net/AXdtH/1636

    – Ky.

    30. November 2014 um 23:49 Uhr

Wie bekomme ich Element nach Klasse in JavaScript
Kalt kalt

Natürlich unterstützen alle modernen Browser jetzt den folgenden einfacheren Weg:

var elements = document.getElementsByClassName('someClass');

aber seien Sie gewarnt, es funktioniert nicht mit IE8 oder früher. Sehen http://caniuse.com/getelementsbyclassname

Außerdem werden nicht alle Browser ein pure zurückgeben NodeList wie sie sollen.

Sie sind wahrscheinlich immer noch besser dran, wenn Sie Ihre bevorzugte Cross-Browser-Bibliothek verwenden.

  • Für IE8 können Sie verwenden querySelectorAll.

    – Grasdoppelt

    27. Juni 2017 um 7:22 Uhr


1647275109 228 Wie bekomme ich Element nach Klasse in JavaScript
Cristian Sánchez

document.querySelectorAll(".your_class_name_here");

Das funktioniert in “modernen” Browsern, die diese Methode implementieren (IE8+).

function ReplaceContentInContainer(selector, content) {
  var nodeList = document.querySelectorAll(selector);
  for (var i = 0, length = nodeList.length; i < length; i++) {
     nodeList[i].innerHTML = content;
  }
}

ReplaceContentInContainer(".theclass", "HELLO WORLD");

Wenn Sie Unterstützung für ältere Browser bereitstellen möchten, können Sie eine eigenständige Auswahl-Engine wie laden Brutzeln (4KB mini+gzip) oder Schwungvoll (10K mini) und greifen darauf zurück, wenn die native querySelector-Methode nicht gefunden wird.

Ist es übertrieben, eine Selektor-Engine zu laden, nur um Elemente mit einer bestimmten Klasse zu erhalten? Wahrscheinlich. Die Skripte sind jedoch nicht allzu groß, und Sie werden die Selektor-Engine möglicherweise an vielen anderen Stellen in Ihrem Skript nützlich finden.

  • @Taylor: Ich denke, es funktioniert in IE8 (nicht 100% sicher – zu faul, um es zu googeln). Unabhängig davon habe ich einige Informationen zur Abwärtskompatibilität mit Selektor-Engines von Drittanbietern hinzugefügt.

    – Cristian Sánchez

    28. September 2010 um 0:32 Uhr

  • document.querySelector funktioniert in IE8 und höher: caniuse.com/queryselector

    –Zeke

    21. Dezember 2012 um 4:38 Uhr

Ein einfacher und einfacher Weg

var cusid_ele = document.getElementsByClassName('custid');
for (var i = 0; i < cusid_ele.length; ++i) {
    var item = cusid_ele[i];  
    item.innerHTML = 'this is value';
}

1647275110 733 Wie bekomme ich Element nach Klasse in JavaScript
Afsantos

Ich bin überrascht, dass es keine Antworten mit regulären Ausdrücken gibt. Das ist so ziemlich Andrews Antwort, using RegExp.test anstatt String.indexOfda es laut scheint, für mehrere Operationen besser zu funktionieren jsPerf-Tests.
Es auch scheint auf IE6 unterstützt zu werden.

function replaceContentInContainer(matchClass, content) {
    var re = new RegExp("(?:^|\\s)" + matchClass + "(?!\\S)"),
        elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if (re.test(elems[i].className)) {
            elems[i].innerHTML = content;
        }
    }
}

replaceContentInContainer("box", "This is the replacement text.");

Wenn Sie häufig nach denselben Klassen suchen, können Sie sie weiter verbessern, indem Sie die (vorkompilierten) regulären Ausdrücke an anderer Stelle speichern und sie anstelle eines Strings direkt an die Funktion übergeben.

function replaceContentInContainer(reClass, content) {
    var elems = document.getElementsByTagName('*'), i;
    for (i in elems) {
        if (reClass.test(elems[i].className)) {
            elems[i].innerHTML = content;
        }
    }
}

var reBox = /(?:^|\s)box(?!\S)/;
replaceContentInContainer(reBox, "This is the replacement text.");

Das sollte in so ziemlich jedem Browser funktionieren…

function getByClass (className, parent) {
  parent || (parent=document);
  var descendants=parent.getElementsByTagName('*'), i=-1, e, result=[];
  while (e=descendants[++i]) {
    ((' '+(e['class']||e.className)+' ').indexOf(' '+className+' ') > -1) && result.push(e);
  }
  return result;
}

Sie sollten es wie folgt verwenden können:

function replaceInClass (className, content) {
  var nodes = getByClass(className), i=-1, node;
  while (node=nodes[++i]) node.innerHTML = content;
}

var elems = document.querySelectorAll('.one');

for (var i = 0; i < elems.length; i++) {
    elems[i].innerHTML = 'content';
};

  • Das ist nicht wirklich eine Antwort. Bitte versuche zu erklär mal deinen Code. Darüber hinaus ist es im Grunde eine kompaktere Version einer anderen Antwort auf diese Frage, die vor 5 Jahren veröffentlicht wurde.

    – Helmbert

    12. Mai 2015 um 15:45 Uhr

  • Ich weiß nicht, was das Problem ist. Diese Antwort ist in Ordnung. Es gibt keinen Kommentar … und was? Das ist keine Goldregel. Und was willst du hier kommentieren? Und Aber ist es lesbarer Code?

    – AntiCZ

    23. Juli 2015 um 10:56 Uhr


1002350cookie-checkWie bekomme ich Element nach Klasse in JavaScript?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy