2010-11-10 28 views
10

nào sau đây là hiệu quả hơn (ví dụ nhanh hơn):jQuery show() vs thêm lớp

$(elem).show(); 

hoặc

$(elem).addClass(displayClass); // Where display class is "display: block;" 

Hoặc là họ giống hệt nhau?

+0

Cách nhanh hơn để thêm "display: block;" sau đó loại bỏ nó nếu bạn làm điều đó, hoặc chỉ để thay đổi không để chặn? – rapadura

Trả lời

6

Không, chúng hoàn toàn là không phải giống hệt nhau.

lớn khác biệt giữa sửa đổi trực tiếp với kiểu phần tử và sửa đổi "gián tiếp" bằng cách thay đổi lớp của phần tử và điều đó thực sự khá rõ ràng. Bằng cách viết mã hợp tác giữa Javascript và CSS, các thay đổi của lớp giúp bạn linh hoạt hơn nhiều. Javascript quản lý trạng thái trạng thái trong khi CSS thúc đẩy hiệu ứng thực tế của trạng thái đó.

Các phương pháp show()hide() tiện dụng và dễ dàng, nhưng (theo ý kiến ​​của tôi) quản lý trạng thái/ngoại hình theo tên lớp thực sự là một cách mạnh mẽ hơn và có thể bảo trì để làm việc. Trong thực tế, bạn luôn có thể viết các plugin jQuery nhỏ của riêng bạn để thêm/xóa các lớp có ý nghĩa với ứng dụng của bạn, để tránh việc tự mình truyền bá tên lớp thông qua mã của bạn.

18

Nó phụ thuộc những gì bạn đang sau, họ làm những việc khác nhau:

  • $(elem).show(); - cho thấy yếu tố, khôi phục display từ trước .hide() hoặc khôi phục mặc định display cho các loại nguyên tố
  • $(elem).addClass(displayClass); - cho biết thêm một lớp, luôn luôn có một số display nhất định, không thực sự khôi phục những gì ở đó - điều này ít linh hoạt hơn

Đó là nhanh hơn? .addClass() tay xuống, you can test it yourself here, chỉ cần does a lot less work hơn .show() does. Tuy nhiên, nó không làm nhiều tính năng khôn ngoan, vì vậy nó ít linh hoạt hơn vì những lý do trên.

+3

+1 để cung cấp trường hợp kiểm tra jsPerf. –

+0

Đây là so sánh thực thi chức năng giữa chương trình và addClass. Còn thời gian giới thiệu lại CSSDOM thì sao? – Ozil

0

Chúng không giống nhau; chúng hoạt động hoàn toàn khác nhau. Họ có thể trong trường hợp của bạn có tác dụng tương tự, nhưng không tin vào nó. Ví dụ: addClass có thể không thực sự hiển thị phần tử trong mọi trường hợp. Nếu phần tử có các phong cách khác mà supercede lớp (ví dụ như ID cấp ID, hoặc phong cách nội tuyến, vv), sau đó thêm một lớp học sẽ không có bất kỳ hiệu ứng nào cả.

Ngoài ra, đặt display:block chỉ đúng cho các thành phần bạn muốn hiển thị dưới dạng khối. Nếu bạn có các yếu tố nội tuyến (hoặc tệ hơn, các bảng) và bạn cố gắng hiển thị chúng dưới dạng khối, kết quả có thể không phải là những gì bạn mong đợi.

Cuối cùng, .addClass() chắc chắn liên quan đến việc xử lý nhiều hơn cho trình duyệt hơn .show(), vì vậy bạn không làm mọi thứ dễ dàng hơn cho trang web của mình bằng cách sử dụng nó.

Tóm lại, nếu đó là tất cả những gì bạn đang cố gắng đạt được, hãy sử dụng .show() - đó là cách jQuery chính xác để làm điều đó.

+1

addClass chắc chắn không liên quan đến việc xử lý nhiều hơn như @Pointy cho thấy trong bài kiểm tra jsperf của mình. Trong thực tế, tôi nghĩ rằng nó sẽ là một ý tưởng tốt hơn cho mọi người để thực hiện một chương trình tùy chỉnh/ẩn được sử dụng 'addClass' &' removeClass' bên dưới mui xe. – Akkuma

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