2011-07-02 6 views
7

Potrzebuję otrzymać klasę elementu. Inna wtyczka wstawia do klasy drugą klasę, ale nie chcę odbierać tej drugiej klasy. Do tej pory mam:

target_text = $(this).attr("class"); 

Które zwraca w tej chwili:

some-class sfHover 

Nie chcę, aby uzyskać klasę "sfHover". Jak mogę usunąć go z mojej zmiennej?

(Klasy chcę dostać są generowane dynamicznie, więc nie mogę nasłuchiwać konkretnych nazw i używać tylko tych).

Dzięki

+0

Jak wiesz, co zajęcia chcesz zachować lub usunąć? – lonesomeday

+0

@lonesomeday: Myślę, że po prostu chce usunąć 'sfHover'. – thirtydot

+0

poprawne ... Właściwie to właśnie odkryłem linię "$ (this) .removeClass (" sfHover ");" przed ustawieniem zmiennej "target_text" działa. Po prostu nie jestem pewien, czy to dobry sposób na zrobienie tego? – maze

Odpowiedz

-1

Jeśli chcesz tylko pierwsza klasa spróbować: $(this).attr("class").get(0)

+2

, który zwraca element dom i wykonuje bezcelowe wyszukiwanie atrybutów, co oznacza wykonanie podziału na klasy i zwrócenie pierwszego elementu w tablicy np. This.className.split (/ \ s + /) [0]; – redsquare

2
var target_text = this.className.replace(/sfHover/, ""); 
0

Jeśli zawsze wiedzieć klasa będzie pierwszym, i zawsze wiesz, będzie to mieć klasę:

target_text = this.className.split(' ')[0]

Nie ma potrzeby stosowania metod jQuery podczas wykonywania prostych czynności DOM.

Zauważ, że powyższy błąd wystąpi, jeśli element NIE ma klasy (myślę, że nazwaklasy byłaby zerowa). Może być bezpieczniej zrobić

target_text = this.className && this.className.split(' ')[0]

Ponadto, w zależności od tego, co staramy się robić, może warto rozważyć refactoring kodu nie zapamiętuje stanu w DOM. Staraj się unikać przechowywania informacji w DOM, jest drogi, a DOM jest brzydki.

2

podobne do Tomalak za odpowiedź:

Wyciągu jQuery zwraca ciąg znaków (metoda jQuery attr() zwraca ciąg znaków), więc należy manipulować z prostego javascript:

target_text = $(this).attr("class").replace('sfHover ',''); 
Powiązane problemy