Gibt es in jQuery eine Möglichkeit, alle Klassen, die einem Element zugewiesen sind, zu durchlaufen oder einem Array zuzuweisen?
Ex.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Ich werde nach einer "speziellen" Klasse wie in "dolor_spec" oben suchen. Ich weiß, dass ich hasClass () verwenden könnte, aber der tatsächliche Klassenname muss zu diesem Zeitpunkt nicht unbedingt bekannt sein.
javascript
jquery
html
Buggabill
quelle
quelle
Antworten:
Sie können verwenden
document.getElementById('divId').className.split(/\s+/);
, um eine Reihe von Klassennamen zu erhalten.Dann können Sie iterieren und die gewünschte finden.
jQuery hilft Ihnen hier nicht wirklich ...
quelle
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Warum hat niemand einfach aufgelistet.
BEARBEITEN: Wie @MarkAmery hervorhebt, können Sie dies nicht nur,
.split(' ')
weil Klassennamen durch beliebige Leerzeichen getrennt werden können.quelle
$('<div class="foo bar baz">').attr("class").split(' ')
in Ihre Browserkonsole einzufügen (dort befindet sich ein Tabulatorzeichen). Sie erhalten["foo", "bar baz"]
anstelle der richtigen Klassenliste von["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, würden Sie ein Array mit leeren Zeichenfolgenelementen erhalten.Bei der Unterstützung von Browsern können Sie die
classList
Eigenschaft von DOM-Elementen verwenden .Es ist ein Array-ähnliches Objekt, das alle Klassen des Elements auflistet.
Wenn Sie alte Browserversionen unterstützen müssen, die die
classList
Eigenschaft nicht unterstützen , enthält die verknüpfte MDN-Seite auch einen Shim dafür - obwohl selbst der Shim in Internet Explorer-Versionen unter IE 8 nicht funktioniert.quelle
.classList
ist kein echtes Array, und solche Methoden.indexOf(⋯)
funktionieren nicht daran. Es ist nur ein "Array-ähnliches Objekt", während.className.split(/\s+/).indexOf(⋯)
(aus der akzeptierten Antwort) funktioniert.Array
using[...iterable]
oderArray.from(iterable)
Hier ist ein jQuery-Plugin, das ein Array aller Klassen zurückgibt, über die die übereinstimmenden Elemente verfügen
Verwenden Sie es wie
In Ihrem Fall kehrt zurück
Sie können auch eine Funktion an die Methode übergeben, die für jede Klasse aufgerufen werden soll
Hier ist eine jsFiddle, die ich eingerichtet habe, um http://jsfiddle.net/GD8Qn/8/ zu demonstrieren und zu testen.
Minimiertes Javascript
quelle
Sie sollten dieses versuchen:
Es gibt ein Array aller aktuellen Klassen des Elements zurück.
quelle
.classList
Lösung ist - Sie müssen nur auf Inkonsistenzen und / oder fehlende Browserunterstützung.classList
es funktioniert ziemlich gut in modernen BrowsernclassList
Eigenschaft in IE 10/11 für SVG-Elemente nicht funktioniert (obwohl sie für HTML-Elemente funktioniert). Siehe developer.mozilla.org/en-US/docs/Web/API/Element/classListquelle
Aktualisieren:
Wie @Ryan Leonard richtig betont hat, behebt meine Antwort nicht wirklich den Punkt, den ich selbst gemacht habe ... Sie müssen doppelte Leerzeichen mit (zum Beispiel) string.replace (/ + / g, "") sowohl trimmen als auch entfernen. .. Oder Sie können den el.className teilen und dann leere Werte mit (zum Beispiel) arr.filter (Boolean) entfernen.
oder moderner
Alt:
Bei all den gegebenen Antworten sollten Sie niemals vergessen, .trim () (oder $ .trim ()) zu verwenden.
Da Klassen hinzugefügt und entfernt werden, kann es vorkommen, dass zwischen den Klassenzeichenfolgen mehrere Leerzeichen stehen. Beispiel: 'class1 class2 class3'.
Dies würde sich in ['Klasse1', 'Klasse2', '', '', '', 'Klasse3'] verwandeln.
Wenn Sie Trimmen verwenden, werden alle mehreren Leerzeichen entfernt.
quelle
.classList
ist ein viel sauberer Ansatz!quelle
.map
; Verwenden.each
Sie diese Option.map
, wenn Sie den Rückgabewert nicht benötigen . Das Aufteilen von Leerzeichen anstelle von Leerzeichen ist ebenfalls fehlerhaft - siehe meinen Kommentar zu stackoverflow.com/a/10159062/1709587 . Selbst wenn keiner dieser Punkte wahr wäre, fügt dies der Seite nichts Neues hinzu. -1!Könnte Ihnen das auch helfen. Ich habe diese Funktion verwendet, um Klassen von Kinderelementen zu erhalten.
In Ihrem Fall möchten Sie doler_ipsum Klasse u können dies jetzt tun
calsses[2];
.quelle
Vielen Dank dafür - ich hatte ein ähnliches Problem, da ich versuche, Objekte programmatisch mit hierarchischen Klassennamen zu verknüpfen, obwohl diese Namen meinem Skript möglicherweise nicht unbedingt bekannt sind.
In meinem Skript möchte ich, dass ein
<a>
Tag den<a>
Hilfetext[some_class]
ein-toggle
und ausschaltet, indem das Tag plus die Klasse von und dann der Hilfetext die Klasse von angegeben wird[some_class]_toggle
. Dieser Code findet die zugehörigen Elemente erfolgreich mit jQuery:quelle
Versuche dies. Dadurch erhalten Sie die Namen aller Klassen aus allen Elementen des Dokuments.
});
Hier ist das Arbeitsbeispiel: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
quelle
Ich hatte ein ähnliches Problem für ein Element vom Typ Bild. Ich musste überprüfen, ob das Element einer bestimmten Klasse angehörte. Zuerst habe ich versucht mit:
aber ich habe ein schönes "diese Funktion ist für dieses Element nicht verfügbar".
Dann habe ich mein Element im DOM-Explorer überprüft und ein sehr schönes Attribut gesehen, das ich verwenden konnte: className. Es enthielt die Namen aller Klassen meines Elements, die durch Leerzeichen getrennt waren.
Sobald Sie dies erhalten haben, teilen Sie einfach die Zeichenfolge wie gewohnt.
In meinem Fall hat das funktioniert:
Ich gehe davon aus, dass dies mit anderen Arten von Elementen funktionieren würde (außer img).
Ich hoffe es hilft.
quelle
Javascript bietet ein classList-Attribut für ein Knotenelement in dom. Einfach benutzen
gibt ein Objekt der Form zurück
Das Objekt verfügt über Funktionen wie enthält, hinzufügen, entfernen, die Sie verwenden können
quelle
Ein bisschen spät, aber mit der Funktion verlängern () können Sie "hasClass ()" für jedes Element aufrufen, z.
var hasClass = $('#divId').hasClass('someClass');
quelle
Die Frage ist, wozu Jquery entwickelt wurde.
Und warum hat niemand .find () als Antwort gegeben?
Es gibt auch classList für Nicht-IE-Browser:
quelle
Hier ist die Antwort von Readsquare , um ein Array aller Klassen zurückzugeben:
Übergeben Sie ein jQuery-Element an die Funktion, sodass ein Beispielaufruf lautet:
quelle
$(elem).attr('class').split(/\s+/)
. Vielleicht irre ich mich, aber ich sehe keinen Grund, eine Sammlung zu durchlaufen, den Inhalt in eine neue Sammlung zu kopieren und diese neue Sammlung zurückzugeben.Ich weiß, dass dies eine alte Frage ist, aber immer noch.
Wenn Sie das Element bearbeiten möchten
Wenn Sie überprüfen möchten, ob das Element eine Klasse hat
wenn mehrere Klassen
quelle