2010-11-05 10 views
17

obecnie używam tego, aby uzyskać klasę dla danego kawałka kodu HTML na stronie:jQuery: Wybierz tylko klasę zawierającą ciąg znaków?

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

Ale div ma wiele klas: current_status status_billed

mój koniec celem jest, by chwycić klasę zaczyna się od status_ i zastępuje ją inną nazwą klasy.

Więc używając mojego .parent() funkcji powyżej, jestem w stanie wybrać div muszę, ale wtedy trzeba usunąć klasę status_billed i zastąpić ją, na przykład, status_completed (lub kilku innych nazw klas).

Odpowiedz

41

Wybierz div s, które mają klasę status_billed:

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

Wybierz div s którego class atrybut zawiera status_:

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

To o najlepszym dostaniesz z jQuery selectors. Można to zrobić lepiej przy użyciu .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; 
}); 

... ale nie jestem pewien, dlaczego robisz to wszystko - .parent() powraca co najwyżej 1 elementu. Czy miałeś na myśli .closest() lub .parents()?

+1

Ach, to dobre połączenie, dzięki. Właśnie usunąłem swój wpis, aby nie tracić czasu na tę trasę. – McStretch

+0

@McStretch: Widziałem. :) –

+0

Można również użyć klas powrotu [i]; zamiast zwrotu true; aby zwrócić aktualny status_xxxx. –

Powiązane problemy