2008-12-02 34 views
7

Điều này không bị nhầm lẫn với "How to tell if a DOM element is visible?"Làm cách nào để biết phần tử DOM có được hiển thị không?

Tôi muốn xác định xem phần tử DOM đã cho có hiển thị trên trang hay không. Ví dụ: nếu phần tử là phần tử con của một phụ huynh có số display:none; thì phần tử đó sẽ không hiển thị.

(Điều này không có gì để làm với việc nguyên tố này là trong chế độ xem hoặc không)

tôi có thể lặp qua mỗi phụ huynh của nguyên tố này, kiểm tra display phong cách, nhưng tôi muốn biết nếu có một cách trực tiếp hơn?

Trả lời

14

Từ thử nghiệm nhanh trong Firefox, có vẻ như kích thước và thuộc tính vị trí (clientWidth, offsetTop, v.v.) đều trả về 0 khi phần tử bị ẩn bởi cha/mẹ là display:none.

+3

Ý tưởng tốt. Nó thậm chí được chỉ định: http://www.w3.org/TR/cssom-view/#offset-attributes – Kornel

+1

Trong bản thảo Mô-đun xem CSSOM hiện tại (2013) liên kết được đăng bởi @Kornel không trỏ đến phần đúng nữa. Xem [w3.org/TR/cssom-view/#dom-htmlelement-offsettop] (http://www.w3.org/TR/cssom-view/#dom-htmlelement-offsettop). – falconepl

1

Sử dụng Prototype:

if($('someDiv').visible) {...} 
+2

Sẽ hữu ích hơn nếu bạn đã cung cấp mã nguồn cho chức năng này của Prototype, để cho thấy nó có thể thực sự được thực hiện như thế nào. –

+3

Tôi chỉ sử dụng thư viện. Tôi không viết nó. –

0

Như tôi đang sử dụng MochiKit, những gì tôi đã đưa ra dựa trên câu trả lời Ant P là:

getElementPosition('mydiv').y != 0 

Tôi cũng có thể kiểm tra xem nó trong khung nhìn (theo chiều dọc) bởi:

y = getElementPosition('mydiv').y 
(y < getViewportPosition().y + getViewportDimensions().h && 
    getViewportPosition().y < y) 

Ngẫu nhiên điều này cũng hoạt động trong IE6.

+0

+1 cho MochiKit - Tôi yêu MK. –

0

Dựa vào vị trí là 0 là giòn. Bạn nên viết một hàm trợ giúp để lặp qua các bậc cha mẹ để kiểm tra kiểu hiển thị của chúng trực tiếp.

+0

Chăm sóc để xây dựng? Nếu nó ở trong tiêu chuẩn, được hỗ trợ bởi đám đông tuân thủ tiêu chuẩn (FF, WebKit,…) và được hỗ trợ bởi khỉ đột không tuân thủ, điều gì làm cho nó trở nên giòn? –

+0

@BenBlank: nếu yếu tố hiển thị thực sự có vị trí 0 thì sao? – mgol

0

Đây là giải pháp lặp đi lặp lại -

var elementShown = function(e){ 
    if (e == document) 
     return true; 

    if ($(e).css('display') == 'none') //or whatever your css function is 
     return false; 

    return elementShown(e.parentNode); 
} 
Các vấn đề liên quan