2011-07-02 18 views
7

Tôi cần phải nhận lớp của phần tử. Một plugin khác chèn một lớp thứ hai vào phần tử nhưng tôi không muốn nhận lớp thứ hai này. Cho đến nay tôi có:

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

nào trả tại thời điểm này:

some-class sfHover 

Tôi không muốn để có được lớp "sfHover". Làm thế nào tôi có thể loại bỏ nó khỏi biến của tôi?

(Các lớp học tôi muốn nhận được tạo ra tự động, vì vậy tôi không thể nghe cho tên cụ thể và chỉ sử dụng những.)

Cảm ơn

+0

Làm thế nào để bạn biết lớp học những gì bạn muốn giữ hoặc xóa? – lonesomeday

+0

@lonesomeday: Tôi nghĩ anh ấy chỉ muốn xóa 'sfHover'. – thirtydot

+0

đúng ... Thực ra tôi vừa phát hiện thêm một dòng "$ (this) .removeClass (" sfHover ");" trước khi đặt biến "target_text" hoạt động. Tôi không chắc đây có phải là cách hay để làm điều đó không? – maze

Trả lời

-1

Nếu bạn chỉ muốn lớp thử đầu tiên: $(this).attr("class").get(0)

+2

trả về phần tử dom và thực hiện tra cứu thuộc tính vô nghĩa bạn muốn chia nhỏ các lớp và trả về mục đầu tiên trong mảng, ví dụ this.className.split (/ \ s + /) [0]; – redsquare

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

Nếu bạn luôn biết lớp học của bạn sẽ là người đầu tiên, và bạn luôn biết điều đó sẽ có một lớp:

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

Không cần các phương thức jQuery khi bạn đang thực hiện các công cụ DOM đơn giản.

Lưu ý ở trên sẽ báo lỗi nếu mục có lớp NO (tôi nghĩ, className sẽ là rỗng). Có thể được an toàn hơn để làm

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

Ngoài ra, tùy thuộc vào những gì bạn đang cố gắng làm, bạn có thể muốn xem xét refactoring mã của bạn để không lưu trữ nhà nước trong DOM. Cố gắng tránh lưu trữ thông tin trong DOM, nó đắt và DOM là xấu.

2

Tương tự như Tomalak của câu trả lời:

tuyên bố jQuery của bạn trả về một chuỗi (phương pháp jQuery attr() trả về một string), vì vậy bạn nên vận dụng nó với javascript đơn giản:

target_text = $(this).attr("class").replace('sfHover ',''); 
Các vấn đề liên quan