JQuery: как проверить, есть ли у элемента определенный класс / стиль css

85

У меня есть div:

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

Есть ли способ проверить, является ли определенный элемент:

$("#someElement") 

имеет определенный класс (в моем случае «тест»).

В качестве альтернативы, есть ли способ проверить, что элемент en имеет определенный стиль? В этом примере я хотел бы знать, есть ли у элемента " position: absolute".

Большое спасибо!

0100110010101
источник
14
не уверен, что это неправильный вопрос или ответ, но вопрос имеет style = "test", а в ответе
ищется
1
Я предполагаю, что вопрос неправильный, поскольку он отметил неправильный ответ как правильный; но в любом случае, посмотрев на голоса, я думаю, что большинство людей наткнулись здесь в поисках правильного ответа на этот неправильный вопрос ... эээ, если это имеет какой-либо смысл ... Я имею в виду ответ DrJokepu. По крайней мере, поэтому я здесь.
BrainSlugs83

Ответы:

57
if($('#someElement').hasClass('test')) {
  ... do something ...
}
else {
  ... do something else ...
}
Дарин Димитров
источник
75
Это не отвечает на заданный вопрос - см. Ответ DrJokepu ниже.
Райан Бёрни
281

Стили CSS - это пары «ключ-значение», а не просто «теги». По умолчанию каждый элемент имеет полный набор назначенных ему стилей CSS, большинство из них неявно использует настройки браузера по умолчанию, а некоторые из них явно переопределяются в таблицах стилей CSS.

Чтобы получить значение, присвоенное определенной записи CSS элемента, и сравнить его:

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

Если вы не переопределяли стиль, вы получите значение браузера по умолчанию для этого конкретного элемента.

Тамаш Чинеге
источник
3
Нет возможности сделать это с помощью селектора?
BrainSlugs83
с этим вы можете увидеть, что является фактическим свойством, мне нужно знать, устанавливается ли это свойство напрямую или оно унаследовано от стиля / браузера css ... возможно ли это?
ante.sabo
Кажется, не работает для сценария, если DOM изменяется / значение css объекта изменяется после загрузки страницы. Есть идеи, как заставить его смотреть изменения css после загрузки DOM?
Collarbone
@Collarbone Вы всегда можете использовать setTimeout () и clearTimeout (), чтобы отложить вызов на секунду или около того после загрузки документа.
проби
13
if ($("element class or id name").css("property") == "value") {
    your code....
}
Сандип Гупта
источник
4

Или, если вам нужно получить доступ к элементу, у которого есть это свойство, и он не использует идентификатор, вы можете пойти по этому пути:

$("img").each(function () {
        if ($(this).css("float") == "left") { $(this).addClass("left"); }
        if ($(this).css("float") == "right") { $(this).addClass("right"); }
    })
Kelseedev
источник
1

я нашел одно решение:

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

но почему-то я верю, что есть способ получше!

0100110010101
источник
1

Вопрос требует двух разных вещей:

  1. Элемент имеет определенный класс
  2. У элемента есть определенный стиль.

На второй вопрос уже дан ответ. Для первого я бы сделал так:

if($("#someElement").is(".test")){
    // Has class test assigned, eventually combined with other classes
}
else{
    // Does not have it
}
Марио Васкес
источник