Выберите все элементы, которые имеют определенный CSS, с помощью jQuery



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



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

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


как выбрать по свойству с именем "округленный"?



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



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


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



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


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

589   6  

6 ответов:

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

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

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

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

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

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

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

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

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

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

похожие как Бижу по. Просто немного улучшение:

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

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

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

здесь пример.

вот чистое, простое для понимания решение:

// 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();
    }
});

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

вещи на замену:

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

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

CSS

.Title
{
    color:red;
}

.Caption
{
    color:black;
}

HTML

вам не нужно определять округленное:true свойство вообще. Просто используйте наличие класса 'Rounded':

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

JS

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

Comments

    Ничего не найдено.