2010-11-05 3 views
17

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

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

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

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

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

ответ

41

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

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

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

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

Это о лучшем случае вы получите с jQuery selectors. Вы можете сделать лучше, используя .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()?

+1

Ах, это хороший звонок, спасибо. Я просто удалил свой пост, поэтому он не тратит время на этот маршрут. – McStretch

+0

@ McStretch: Я видел. :) –

+0

Вы также можете использовать классы возврата [i]; вместо возврата true; для возврата фактического состояния_xxxx. –