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 ответ

41

Выберите div s, у которых есть класс status_billed :

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

Выберите div s, у%% которого__% %_%% содержит class :

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

Это самое лучшее, что вы получите с помощью селекторов jQuery . Вы можете сделать лучше, используя status_ :

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

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

    
ответ дан 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
Показать остальные комментарии