2012-11-13 33 views
82

Tôi đã đi qua các kịch bản sau đó kiểm tra xem một yếu tố có lớp a, và nếu không, thêm nó:Tôi có nên sử dụng "hasClass" trước "addClass" không?

if (!$("div").hasClass("a")){ 
    $("div").addClass("a"); 
} 

Như jQuery sẽ không thêm lớp nếu nó đã tồn tại, điều này có thể được thay đổi để :

$("div").addClass("a"); 

Tuy nhiên, là có bất kỳ cải tiến hiệu suất bằng cách sử dụng hasClass đầu tiên, hoặc là này sử dụng cùng một phương pháp mà addClass làm dù sao, và do đó nhân đôi logic?

Trả lời

133

Kiểm tra .hasClass() không hữu ích vì jQuery will also always check từ trong vòng .addClass(). Nó chỉ là công việc phụ.

11

Bạn có thể xem tại mã nguồn: https://github.com/jquery/jquery/blob/master/src/attributes/classes.js#L38-L45 mà họ kiểm tra xem lớp học có tồn tại khi sử dụng addClass hay không.

Vì vậy, không có lý do để sử dụng .hasClass() trong trường hợp này .. (một ngoại lệ sẽ được nếu bạn muốn thực hiện nhiều hành động nếu phần tử không có lớp ..)

+3

Xin chào từ Thessaloniki và +1 - Tôi không biết về mẹo '# LX-Y' :) – Jon

+3

Xin chào Jon :) Cũng có thể chọn chuột .. (* nhấp vào số dòng và shift + click trên một mạng khác để chọn tất cả các dòng .. *) –

4

Đối với những gì nó có đáng giá, có cải thiện hiệu suất với .hasClass() trong thử nghiệm có giới hạn của tôi: http://jsperf.com/jquery-hasclass-vs-addclass-and-removeclass

Tuy nhiên, ngay cả khi độc lập báo cáo chậm hơn vài lần trong Chrome, nó hoạt động khoảng 70.000 giây.

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