2012-11-02 37 views
7

Làm cách nào để ẩn phần tử bị ẩn?Ẩn phần tử bị ẩn ... Làm thế nào xấu?

Vì vậy, giả sử phần tử #myelement bị ẩn và tôi thực hiện $('#element').hide(). Nó có tệ không? Tôi có nên kiểm tra xem nó có hiển thị trước không?

Cảm ơn!

+1

Thật tệ khi hiển thị phần tử khối! :) nếu bạn đang nói về một yếu tố duy nhất .... đừng bận tâm. Khách hàng đang chờ đợi. –

+0

Tại sao phải ẩn phần tử bị ẩn? Mục đích của việc đó là gì? – Vucko

+0

@Vucko: Không có mục đích. Chỉ cần tránh làm phức tạp mã (với logic cần thiết để tránh bị lẩn trốn). – Thilo

Trả lời

14

jQuery kiểm tra nếu yếu tố có thể nhìn thấy và ẩn chỉ nếu nó có thể nhìn thấy: https://github.com/jquery/jquery/blob/master/src/css.js#L78

} else if (!values[ index ] && !isHidden(elem)) { 
     jQuery._data(elem, "olddisplay", curCSS(elem, "display")); 
    } 

Vì vậy, bạn không cần thực hiện kiểm tra bổ sung. Bất kỳ kiểm tra thủ công nào sẽ làm cho hiệu suất (và khả năng đọc thực sự) tồi tệ hơn.

0

Nếu bạn ẩn một phần tử đã bị ẩn, không có gì sẽ xảy ra.

Cách duy nhất là 'xấu' là nó đang thực thi mã mà không cần phải được thực hiện.

Bạn có thể kiểm tra nếu nó được ẩn sử dụng là():

if(!$("my-element").is(":visible")) { 
    $("my-element").hide(); 
}) 
+1

Tuy nhiên, kết quả trong mã khác đang được thực hiện mà không cần phải là (mã kiểm tra). – Thilo

+0

đúng, nhưng mã kiểm tra này có thể ít hơn mã kiểm tra nội bộ của jQuery ...? Phải có hồ sơ cả hai để chắc chắn :) – danwellman

+0

trong trường hợp có lẽ thường xuyên hơn (mà các yếu tố thực sự cần ẩn), * cả hai * kiểm tra sẽ được chạy. – Thilo

0

Đối với chỉ hiding yếu tố bạn không cần phải kiểm tra xem phần tử đã là hidden hay không nhưng nếu bạn có một trường hợp như thế nếu phần tử là sau đó hiển thị khác làm điều gì đó khác sau đó bạn có thể sử dụng

if ($('your-element').is(':hidden')) { 
$('your-element').show(); 
} else { 
//do something else 
} 
1

Nếu có một sự lựa chọn giữa

$("my-element").hide(); 

if(!$("my-element").is(":visible")) { 
    $("my-element").hide(); 
}) 

nó đơn giản hơn nhiều (tốt hơn?) Để chỉ có dòng đầu tiên cho sake dễ đọc. jQuery sẽ kiểm tra xem bạn có làm hay không.

+0

Hình như @zerkms đã nói điều tương tự. ** Nên ** thực sự nhấp vào liên kết Tải câu trả lời mới, tôi nghĩ vậy. – Abhilash

0

Tốt hơn nên kiểm tra khả năng hiển thị của phần tử trước khi ẩn nó.

$('#element').hide(); 

nó sẽ gây ra một số sự cố trong Internet Explorer (IE9). Một số trang thời gian sẽ không tải đúng cách. Một số nội dung sẽ bị bỏ qua từ trang.

Mã sau đây tốt hơn nhiều.

if(!$("#myelement").is(":visible")) { 
    $("#myelement").hide(); 
}) 
Các vấn đề liên quan