2010-03-22 11 views
10

Tôi đang sử dụng mã JS bên dưới để thay đổi lớp khi liên kết được nhấp.Làm cách nào tôi có thể thiết lập một cách đáng tin cậy trình thu thập lớp với JavaScript, IE, Chrome, v.v.?

document.getElementById("gifts").setAttribute("class", "gkvSprite selected"); 

Tính năng này không hoạt động trong IE nhưng hoạt động trong FF và Chrome. Sau đó, tôi đã thay đổi mã thành:

document.getElementById("gifts").setAttribute("className", "gkvSprite selected"); 

Sau đó, nó hoạt động trong IE, nhưng ngừng hoạt động trong FF và Chrome.

Ai đó có thể giúp tôi ở đây không?

+0

tiêu đề của bạn là lừa đảo, getElementById đang hoạt động tốt, vấn đề của bạn là với việc xử lý thuộc tính lớp của IE. – SpliFF

Trả lời

14

Bạn chắc chắn có thể sử dụng className tài sản thay vì setAttribute:

document.getElementById("gifts").className = "gkvSprite selected"; 

Tổng quát hơn, có một vài tên thuộc tính mà các trình duyệt khác nhau điều trị khác nhau trong setAttribute: class vs className, và for vs htmlFor. Các thư viện như Prototype, jQuery và các loại tương tự sẽ làm nổi bật những khác biệt này cho bạn, mặc dù (một lần nữa) trong tình huống cụ thể của class, bạn có thể sử dụng tài sản một cách đáng tin cậy để thay thế.

+0

Cảm ơn sự giúp đỡ của bạn :) – Alloi

1

Bạn có thể thực hiện việc này theo một vài cách.

Nếu bạn muốn sử dụng setAttribute bạn có thể phát hiện trình duyệt nào khách hàng đang sử dụng và sau đó sử dụng class trong IE và classname trong Firefox.

Ở trên sẽ hiệu quả nhưng tôi muốn sử dụng div hơn và chỉ định một lớp mới cho điều đó.

somediv.className='gkvSprite selected' 

Hoặc như T.J. Crowder đã nói ở trên. Asign qua Classname trực tiếp.

+1

Về việc phát hiện trình duyệt: Trong ít nhất 90% trong số các trường hợp này, bạn nên sử dụng tính năng "phát hiện tính năng" tốt hơn là tìm kiếm trình duyệt. Trong trường hợp này, ví dụ, Prototype sẽ kiểm tra xem * trình duyệt thực tế bạn đang sử dụng * có sử dụng 'class' hoặc' className' (bằng cách kiểm tra nó một lần và ghi nhớ những gì đã xảy ra). Trình duyệt sniffing là dễ bị thất bại trong nhiều cách khác nhau, ít nhất là nhận được lỗi thời như trình duyệt phát triển. Bạn kết thúc với chuỗi logic rất lớn xung quanh phiên bản trình duyệt và trình duyệt ... –

0

Nếu #gifts có chuyển tiếp CSS3 theo thời gian được đặt trên CSS, setAttribute (và removeAttribute và các lệnh js khác) cũng không thành công trong một số trình duyệt. Javascript phải được trì hoãn cho đến khi quá trình chuyển đổi được thực hiện trước khi nó có thể sửa đổi nó.

Các vấn đề liên quan