Jak robisz jQuery za hasClass
pomocą zwykłego JavaScript? Na przykład,
<body class="foo thatClass bar">
W jaki sposób JavaScript pyta, czy <body>
ma thatClass
?
javascript
dom
Kyle
źródło
źródło
class
właściwość (która w przypadku wielu klas będzie miała wiele nazw klas w losowej kolejności oddzielonych spacją) i sprawdzisz, czy w nich jest nazwa twojej klasy. Nie strasznie trudne, ale wciąż okropnie niewygodne, jeśli nie do celów edukacyjnych :)Odpowiedzi:
Możesz sprawdzić, czy
element.className
pasuje/\bthatClass\b/
.\b
pasuje do podziału słowa.Lub możesz użyć własnej implementacji jQuery:
Aby odpowiedzieć na bardziej ogólne pytanie, możesz spojrzeć na kod źródłowy jQuery na github lub na źródło dla
hasClass
konkretnie w tej przeglądarce źródła .źródło
rclass
tak naprawdę jest;))\b
pasowałbyś do „thatClass-anotherClass”?/[\t\r\n\f]/g
. Warto również wspomnieć, że/\bclass\b/
może się nie powieść dla nazw klas ze-
znakiem minus (poza tym, że działa dobrze), dlatego implementacja jQuery jest lepsza i bardziej niezawodna. Na przykład:/\bbig\b/.test('big-text')
zwraca true zamiast oczekiwanego false.Po prostu użyj
classList.contains()
:Inne zastosowania
classList
:Obsługa przeglądarki:
classList
Obsługa przeglądarkiźródło
.classList
jako ciąg znaków, ale nie rozpoznaje nowocześniejszych metod, takich jak.classList.contains()
Najbardziej skuteczna jedna podszewka
thisClass
elementu, który maclass="thisClass-suffix"
.źródło
Atrybut przechowujący używane klasy to
className
.Możesz więc powiedzieć:
Jeśli potrzebujesz lokalizacji, która pokazuje, jak jQuery robi wszystko, sugerowałbym:
http://code.jquery.com/jquery-1.5.js
źródło
match
Atrybut jest przydatny ponownie! Czy naprawdę jQuery robi coś więcej niż jest możliwe w JavaScript ?! Jeśli nie, jQuery to po prostu niepotrzebna waga skrótów.myclass-something
, podobnie jak\b
łącznik.źródło
funkcja hasClass:
funkcja addClass:
funkcja removeClass:
źródło
Korzystam z prostego / minimalnego rozwiązania, jednej linii, w różnych przeglądarkach, a także współpracuję ze starszymi przeglądarkami:
Ta metoda jest świetna, ponieważ nie wymaga wypełniania wieloskładnikowego i jeśli go używasz
classList
, jest znacznie lepsza pod względem wydajności. Przynajmniej dla mnie.Aktualizacja: Zrobiłem malutkie wypełnienie, które jest teraz wszechstronnym rozwiązaniem:
W przypadku innych manipulacji klasami zobacz pełny plik tutaj .
źródło
notmyClassHere
?!/myClass/.test(document.body.className)
zauważ także ten!
symbol.thisIsmyClassHere
.dobrym rozwiązaniem jest praca z classList i zawiera.
zrobiłem to tak:
Potrzebujesz więc swojego elementu i sprawdź listę klas. Jeśli jedna z klas jest taka sama jak ta, której szukasz, zwróci true, jeśli nie, zwróci false!
źródło
Użyj czegoś takiego:
źródło
myHTMLSelector.classList.indexOf('the-class')
? Nie chcesz też>=0
na końcu?[].indexOf
jeśliclassList
macontains
metodę?myHTMLSelector.classList.indexOf('the-class')
zwraca błąd, którymyHTMLSelector.classList.indexOf is not a function
ponieważmyHTMLSelector.classList
nie jest tablicą. Ale myślę, że nazywając to za pomocąArray.prototype
konwersji, zdarza się. Może to obsługiwać starszą przeglądarkę, alecontains
ma bardzo dobre wsparcie.źródło
Ta funkcja „hasClass” działa w IE8 +, FireFox i Chrome:
źródło
Cóż, wszystkie powyższe odpowiedzi są całkiem dobre, ale oto mała prosta funkcja, którą podniosłem. Działa całkiem dobrze.
źródło
classList
macontains
metodę?Co sądzisz o tym podejściu?
https://jsfiddle.net/5sv30bhe/
źródło
class="nothatClassIsnt"
?Oto najprostszy sposób:
źródło