Czy w jQuery istnieje sposób na zapętlenie lub przypisanie do tablicy wszystkich klas przypisanych do elementu?
dawny.
<div class="Lorem ipsum dolor_spec sit amet">Hello World!</div>
Będę szukał „specjalnej” klasy jak w „dolor_spec” powyżej. Wiem, że mógłbym użyć hasClass (), ale rzeczywista nazwa klasy może nie być w tym czasie znana.
javascript
jquery
html
Buggabill
źródło
źródło
Odpowiedzi:
Możesz użyć,
document.getElementById('divId').className.split(/\s+/);
aby uzyskać tablicę nazw klas.Następnie możesz iterować i znaleźć ten, który chcesz.
jQuery nie pomaga ci tutaj ...
źródło
$.fn.classList = function() {return this[0].className.split(/\s+/);};
if ($.inArray("someclass",classList)>=0) { /* hasClass someclass*/ }
Dlaczego nikogo nie wymieniono?
EDYCJA: Jak wskazuje @MarkAmery, nie można po prostu
.split(' ')
dlatego, że nazwy klas można oddzielić dowolnym rodzajem białych znaków.źródło
$('<div class="foo bar baz">').attr("class").split(' ')
w konsoli przeglądarki (jest tam znak tabulacji); otrzymasz["foo", "bar baz"]
zamiast prawidłowej listy klas["foo", "bar", "baz"]
.class="foo <lots of spaces here> bar"
, skończyłbyś tablicą z pustymi elementami łańcucha.W obsługiwanych przeglądarkach można używać
classList
właściwości elementów DOM .Jest to obiekt podobny do tablicy, zawierający listę wszystkich klas tego elementu.
Jeśli potrzebujesz obsługiwać starsze wersje przeglądarki, które nie obsługują tej
classList
właściwości, połączona strona MDN również zawiera podkładkę dla niej - chociaż nawet podkładka nie będzie działać w wersjach Internet Explorer poniżej IE 8.źródło
.classList
nie jest prawdziwą tablicą i.indexOf(⋯)
nie działają na niej takie metody . Jest to tylko „obiekt podobny do tablicy”, podczas gdy.className.split(/\s+/).indexOf(⋯)
(z przyjętej odpowiedzi) działa.Array
używającą[...iterable]
lubArray.from(iterable)
Oto wtyczka jQuery, która zwróci tablicę wszystkich klas, które mają pasujące elementy
Użyj tego jak
W twoim przypadku powraca
Możesz także przekazać funkcję do metody, która zostanie wywołana w każdej klasie
Oto jsFiddle, który skonfigurowałem, aby zademonstrować i przetestować http://jsfiddle.net/GD8Qn/8/
Minified JavaScript
źródło
Powinieneś spróbować tego:
Zwraca tablicę wszystkich bieżących klas elementu.
źródło
.classList
jest rozwiązanie - wystarczy zwrócić uwagę na niespójności i / lub brak obsługi przeglądarki..classList
, działa całkiem dobrze w nowoczesnych przeglądarkachclassList
właściwość nie działa w IE 10/11 dla elementów SVG (choć działa dla elementów HTML). Zobacz developer.mozilla.org/en-US/docs/Web/API/Element/classListźródło
Aktualizacja:
Jak prawidłowo wskazał @Ryan Leonard, moja odpowiedź tak naprawdę nie naprawia punktu, który sam sobie stworzyłem ... Musisz zarówno przycinać, jak i usuwać podwójne spacje (na przykład) string.replace (/ + / g, "") .. Lub możesz podzielić el.className, a następnie usunąć puste wartości za pomocą (na przykład) arr.filter (Boolean).
lub bardziej nowoczesny
Stary:
Przy wszystkich podanych odpowiedziach nigdy nie powinieneś zapominać o użytkowniku .trim () (lub $ .trim ())
Ponieważ klasy są dodawane i usuwane, może się zdarzyć, że między łańcuchem klas jest wiele spacji .. np. „Class1 class2 class3” ..
Zmieniłoby się to w [„klasa 1”, „klasa 2”, „”, „”, „”, „klasa 3”] ..
Podczas korzystania z przycinania wszystkie wielokrotne spacje są usuwane.
źródło
.classList
jest znacznie czystszym podejściem!źródło
.map
; użyj,.each
jeśli nie potrzebujesz.map
wartości zwracanej. Dzielenie spacji zamiast jakichkolwiek białych znaków również jest zepsute - patrz mój komentarz na stackoverflow.com/a/10159062/1709587 . Nawet jeśli żaden z tych punktów nie był prawdziwy, nie dodaje to nic nowego do strony. -1!Może to też może ci pomóc. Użyłem tej funkcji, aby uzyskać klasy elementu potomnego ..
W twoim przypadku chcesz, aby klasa doler_ipsum mogła zrobić to teraz
calsses[2];
.źródło
Dzięki za to - miałem podobny problem, ponieważ próbuję programowo powiązać obiekty z hierarchicznymi nazwami klas, nawet jeśli te nazwy niekoniecznie są znane mojemu skryptowi.
W moim skrypcie chcę, aby
<a>
tag włączał / wyłączał tekst pomocy, podając<a>
tag[some_class]
plus klasętoggle
, a następnie podając jej tekst pomocy klasy[some_class]_toggle
. Ten kod skutecznie odnajduje powiązane elementy za pomocą jQuery:źródło
Spróbuj tego. Otrzymasz nazwy wszystkich klas ze wszystkich elementów dokumentu.
});
Oto działający przykład: https://jsfiddle.net/raju_sumit/2xu1ujoy/3/
źródło
Miałem podobny problem dotyczący elementu obrazu typu. Musiałem sprawdzić, czy element należał do określonej klasy. Najpierw próbowałem z:
ale mam fajny „ta funkcja nie jest dostępna dla tego elementu”.
Następnie sprawdziłem mój element w eksploratorze DOM i zobaczyłem bardzo fajny atrybut, którego mogłem użyć: className. Zawierał nazwy wszystkich klas mojego elementu oddzielone spacjami.
Gdy to otrzymasz, po prostu podziel sznurek jak zwykle.
W moim przypadku to zadziałało:
Zakładam, że działałoby to z innymi rodzajami elementów (oprócz img).
Mam nadzieję, że to pomoże.
źródło
javascript zapewnia atrybut classList dla elementu węzła w dom. Po prostu używa
zwróci obiekt formy
Obiekt ma takie funkcje, jak zawiera, dodaje, usuwa, których można użyć
źródło
Trochę za późno, ale użycie funkcji ext () pozwala wywołać „hasClass ()” na dowolnym elemencie, np .:
var hasClass = $('#divId').hasClass('someClass');
źródło
Pytanie brzmi: do czego służy Jquery.
I dlaczego nikt nie podał .find () jako odpowiedzi?
Istnieje także lista klas dla przeglądarek innych niż IE:
źródło
Proszę bardzo, poprawiłem odpowiedź readsquare , aby zwrócić tablicę wszystkich klas:
Przekaż element jQuery do funkcji, aby przykładowe wywołanie miało postać:
źródło
$(elem).attr('class').split(/\s+/)
robi. Może się mylę, ale nie widzę żadnego powodu, aby iterować kolekcję, kopiować zawartość do nowej kolekcji i zwracać tę nową kolekcję.Wiem, że to stare pytanie, ale nadal.
Jeśli chcesz manipulować elementem
Jeśli chcesz sprawdzić, czy element ma klasę
jeśli wiele klas
źródło