Jquery: Як перевірити, чи має елемент певний клас / стиль css


85

У мене є div:

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

Чи є спосіб перевірити, чи певний елемент:

$("#someElement") 

має певний клас (у моєму випадку "тест").

Як варіант, чи можна перевірити, чи має елемент en певний стиль? У цьому прикладі я хотів би знати, чи має елемент " position: absolute".

Дуже дякую!


14
не впевнений, що це питання чи відповідь неправильна, але питання має style = "test", а відповідь шукає class = "test"
wheresrhys

1
Я здогадуюсь, питання неправильне, оскільки він неправильну відповідь позначив як правильну; але незалежно від того, подивившись голоси, я думаю, що більшість людей тут натрапили, шукаючи правильну відповідь на це неправильне питання ... е-е, якщо це має сенс ... Я маю на увазі відповідь від DrJokepu. Тому я тут принаймні.
BrainSlugs83,

Відповіді:


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

75
Це не відповідає на поставлене запитання - див. Відповідь д-ра Джокепу нижче.
Ryan Burney

281

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

Щоб отримати значення, присвоєне певному запису CSS елементу, і порівняти його:

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

Якщо ви не перевизначили стиль, ви отримаєте браузер за замовчуванням для цього конкретного елемента.


3
Неможливо це зробити за допомогою селектора?
BrainSlugs83,

за допомогою цього ви можете побачити, що є фактичною властивістю, мені потрібно знати, якщо ця властивість встановлюється безпосередньо або вона успадковується від стилю css / браузера ... це можливо?
ante.sabo

Здається, це не працює для сценарію, якщо DOM змінюється / значення css об'єкта змінюється після завантаження сторінки. Будь-яка ідея, як змусити його спостерігати за змінами CSS після завантаження DOM?
Ключиця

@Collarbone Ви завжди можете використовувати setTimeout () і clearTimeout (), щоб затримати дзвінок на секунду або близько того, як тільки документ завантажиться.
probie


4

Або, якщо вам потрібен доступ до елемента, що має цю властивість, і він не використовує ідентифікатор, ви можете піти таким шляхом:

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

1

я знайшов одне рішення:

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

але я якось вірю, що є кращий спосіб!


1

Питання полягає у двох різних речах:

  1. Елемент має певний клас
  2. Елемент має певний стиль.

На друге питання вже відповіли. Для першого я зробив би це так:

if($("#someElement").is(".test")){
    // Has class test assigned, eventually combined with other classes
}
else{
    // Does not have it
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.