Подтвердить что ты не робот

Выберите все элементы с определенным CSS, используя jQuery

Как я могу выбрать все элементы с определенным свойством CSS, используя jQuery? Например:

.Title
{
    color:red;
    rounded:true;
}

.Caption
{
    color:black;
    rounded:true;
}

Как выбрать свойство с именем "rounded"?

Имя класса CSS очень гибкое.

$(".Title").corner();
$(".Caption").corner();

Как заменить эту две операции на одну операцию. Может быть, что-то вроде этого:

$(".*->rounded").corner();

Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

Вы не можете (используя селектор CSS) выбирать элементы на основе свойств CSS, которые были применены к ним.

Если вы хотите сделать это вручную, вы можете выбрать каждый элемент в документе, перебрать их и проверить вычисленное значение интересующего вас объекта (это, вероятно, будет работать только с реальными свойствами CSS, но не сделано например, rounded). Это также было бы медленным.

Обновление в ответ на изменения - селектора групп:

$(".Title, .Caption").corner();

Ответ 2

Это двухгодичный поток, но мне все же было полезно, чтобы он мог быть полезным другим. Вот что я сделал:

var x = $('.myselector').filter(function () { 
    return this.style.some_prop == 'whatever' 
});

не так лаконично, как хотелось бы, но я никогда не нуждался в чем-то подобном, кроме как сейчас, и он не очень эффективен для общего использования, как я вижу.

Ответ 3

Спасибо, Бижу. Я использовал ваше решение, но использовал jQuery.css вместо чистого javascript, например:

var x = $('*').filter(function() {
    return $(this).css('font-family').toLowerCase().indexOf('futura') > -1
})

В этом примере будут отобраны все элементы, в которых значение атрибута font-family содержит "Futura".

Ответ 4

Аналогично Bijou's. Просто немного улучшилось:

$('[class]').filter(function() {
    return $(this).css('your css property') == 'the expected value';
  }
).corner();

Я думаю, что использование $('[class]') лучше:

  • Не нужно жестко кодировать селектор (ы)
  • не будет проверять все элементы HTML один за другим.

Вот пример .

Ответ 5

Вот чистое, понятное решение:

// find elements with jQuery with a specific CSS, then execute an action
$('.dom-class').each(function(index, el) {
    if ($(this).css('property') == 'value') {
        $(this).doThingsHere();
    }
});

Это решение отличается тем, что оно не использует угол, фильтр или возврат. Он намеренно предназначен для более широкой аудитории пользователей.

Что нужно заменить:

  • Замените ".dom-class" на свой селектор.
  • Замените свойство и значение CSS тем, что вы ищете.
  • Замените "doThingsHere()" тем, что вы хотите выполнить на этом найденный элемент.

Ответ 6

Пользовательские свойства CSS не наследуются, поэтому их следует применять непосредственно к каждому элементу (даже если вы используете js для динамического добавления свойств, вы должны сделать это, добавив класс), поэтому...

CSS

.Title
{
    color:red;
}

.Caption
{
    color:black;
}

HTML

Вам вообще не нужно определять свойство rounded: true. Просто используйте присутствие класса "Округлый":

<div class='Title Rounded'><h1>Title</h1></div>
<div class='Caption Rounded'>Caption</div>

JS

jQuery( '.Rounded' ).corner();