JQuery: Jak sprawdzić, czy element ma określoną klasę / styl CSS


85

Mam div:

<div class="test" id="someElement" style="position: absolute"></div>

Czy istnieje sposób, aby sprawdzić, czy dany element:

$("#someElement") 

ma określoną klasę (w moim przypadku „test”).

Czy można też sprawdzić, czy element en ma określony styl? W tym przykładzie chciałbym wiedzieć, czy element ma „ position: absolute”.

Dziękuję Ci bardzo!


14
nie jestem pewien, czy to pytanie, czy odpowiedź jest nieprawidłowa, ale pytanie ma style = "test", a odpowiedź wygląda na class = "test"
wheresrhys

1
Domyślam się, że pytanie jest błędne, ponieważ oznaczył złą odpowiedź jako dobrą; ale niezależnie od tego, po spojrzeniu na głosy, myślę, że większość ludzi natknęła się tutaj, szukając poprawnej odpowiedzi na to złe pytanie ... eee, jeśli to ma jakiś sens ... Mam na myśli odpowiedź od Dr Jokepu. Dlatego przynajmniej tu jestem.
BrainSlugs83

Odpowiedzi:


57
if($('#someElement').hasClass('test')) {
  ... do something ...
}
else {
  ... do something else ...
}

75
To nie odpowiada na zadane pytanie - zobacz odpowiedź DrJokepu poniżej.
Ryan Burney,

281

Style CSS to pary klucz-wartość, a nie tylko „tagi”. Domyślnie każdy element ma przypisany pełny zestaw stylów CSS, większość z nich pośrednio korzysta z domyślnych ustawień przeglądarki, a niektóre z nich są jawnie przedefiniowane w arkuszach stylów CSS.

Aby uzyskać wartość przypisaną do konkretnego wpisu CSS elementu i porównać go:

if ($('#yourElement').css('position') == 'absolute')
{
   // true
}

Jeśli nie przedefiniowałeś stylu, otrzymasz domyślną przeglądarkę dla tego konkretnego elementu.


3
Nie da się tego zrobić za pomocą selektora?
BrainSlugs83

dzięki temu możesz zobaczyć, jaka jest rzeczywista właściwość, muszę wiedzieć, czy ta właściwość jest ustawiana bezpośrednio, czy jest dziedziczona ze stylu / przeglądarki CSS ... czy to możliwe?
ante.sabo

Wydaje się, że nie działa w scenariuszu, jeśli zmienia się DOM / wartość CSS obiektu po załadowaniu strony. Masz pomysł, jak sprawić, by obserwował zmiany css po załadowaniu DOM?
Obojczyk

@Collarbone Zawsze możesz użyć setTimeout () i clearTimeout (), aby opóźnić wywołanie o sekundę po załadowaniu dokumentu.
probie


4

Lub, jeśli chcesz uzyskać dostęp do elementu, który ma tę właściwość i nie używa identyfikatora, możesz skorzystać z tej trasy:

$("img").each(function () {
        if ($(this).css("float") == "left") { $(this).addClass("left"); }
        if ($(this).css("float") == "right") { $(this).addClass("right"); }
    })

1

znalazłem jedno rozwiązanie:

$("#someElement")[0].className.match("test")

ale jakoś wierzę, że jest lepszy sposób!


1

Pytanie dotyczy dwóch różnych rzeczy:

  1. Element ma określoną klasę
  2. Element ma określony styl.

Odpowiedziano już na drugie pytanie. W przypadku pierwszego zrobiłbym to w ten sposób:

if($("#someElement").is(".test")){
    // Has class test assigned, eventually combined with other classes
}
else{
    // Does not have it
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.