jQuery: выбрать только класс, содержащий строку?

17

В настоящее время я использую это, чтобы получить класс для определенного фрагмента HTML на странице:

$(this).parent("div").attr('class')

Но этот div имеет несколько классов: current_status status_billed

Моя конечная цель - взять класс, начинающийся с status_ , и заменить его другим именем класса.

Итак, используя мою функцию .parent() , описанную выше, я могу выбрать нужный мне div, но затем мне нужно удалить класс status_billed и заменить его, например, status_completed (или числом другие имена классов).

    
задан Shpigford 05.11.2010 в 15:45
источник

1 ответ

43

Выберите div s, который имеет класс status_billed :

$(this).parent('div.status_billed')

Выберите div s, чей атрибут class содержит status_ :

$(this).parent('div[class*=status_]')

Это самое лучшее, что вы получите с селекторами jQuery . Вы можете добиться большего, используя .filter() :

$(this).parent('div').filter(function ()
{
    var classes = $(this).attr('class').split(' ');
    for (var i=0; i<classes.length; i++)
    {
        if (classes[i].slice(0,7) === 'status_')
        {
            return true;
        }
    }
    return false;
});

... но я не уверен, почему вы все это делаете - .parent() возвращает максимум 1 элемент , Вы имели в виду .closest() или .parents() ?

    
ответ дан Matt Ball 05.11.2010 в 15:50
  • Ах, это хороший звонок, спасибо. Я просто удалил свой пост, поэтому он не тратит время на этот маршрут. –  McStretch 05.11.2010 в 15:59
  • @McStretch: Я видел. :) –  Matt Ball 05.11.2010 в 16:00
  • Вы также можете использовать классы возврата [i]; вместо возврата true; для возврата фактического состояния_xxxx. –  Thomas F. 05.11.2010 в 16:53
  • @Thomas: это не работает фильтр jQuery (). «Для каждого элемента, если функция возвращает true, элемент будет включен в отфильтрованный набор, в противном случае он будет исключен». –  Matt Ball 05.11.2010 в 17:00
  • Не уверен, что я хорошо поработал, объясняя себя. Я использую parent (), чтобы выбрать родительский div элемента, в котором я сейчас работаю. Мне не нужно возвращать все div с этим классом. Я могу выбрать div, который мне нужен, но в конечном итоге я пытаюсь понять, что такое имя класса, которое начинается с status_, поскольку это может быть несколько разных имен. –  Shpigford 05.11.2010 в 17:38
Показать остальные комментарии