Nếu chúng ta chỉ thu thập những cách cơ bản để phát hiện khả năng hiển thị, hãy để tôi không quên:
opacity > 0.01; // probably more like .1 to actually be visible, but YMMV
Và làm thế nào để có được các thuộc tính:
element.getAttribute(attributename);
Vì vậy, trong ví dụ của bạn:
document.getElementById('snDealsPanel').getAttribute('visibility');
Nhưng còn ai? Nó không hoạt động ở đây. Nhìn kỹ hơn và bạn sẽ thấy rằng khả năng hiển thị đang được cập nhật không phải là một thuộc tính trên thành phần, mà là sử dụng thuộc style
tính. Đây là một trong nhiều vấn đề với việc cố gắng làm những gì bạn đang làm. Trong số những người khác: bạn không thể đảm bảo rằng thực sự có thứ gì đó để xem trong một yếu tố, chỉ vì khả năng hiển thị, hiển thị và độ mờ của nó đều có các giá trị chính xác. Nó vẫn có thể thiếu nội dung hoặc có thể thiếu chiều cao và chiều rộng. Một đối tượng khác có thể che khuất nó. Để biết thêm chi tiết, một tìm kiếm nhanh của Google cho thấy điều này và thậm chí bao gồm một thư viện để thử giải quyết vấn đề. (YMMV)
Kiểm tra những điều sau đây, đó là những bản sao có thể có của câu hỏi này, với những câu trả lời xuất sắc, bao gồm một số hiểu biết sâu sắc từ John Resig hùng mạnh. Tuy nhiên, trường hợp sử dụng cụ thể của bạn hơi khác so với tiêu chuẩn, vì vậy tôi sẽ không gắn cờ:
(CHỈNH SỬA: OP SAYS PAGES PAGES, KHÔNG TẠO RA CHÚNG TÔI, VÌ SAO KHÔNG ĐƯỢC ÁP DỤNG) Một lựa chọn tốt hơn? Liên kết khả năng hiển thị của các yếu tố với các thuộc tính mô hình và luôn tạo khả năng hiển thị phụ thuộc vào mô hình đó, giống như Angular làm với ng-show. Bạn có thể làm điều đó bằng cách sử dụng bất kỳ công cụ nào bạn muốn: Angular, JS đơn giản, bất cứ điều gì. Tốt hơn hết, bạn có thể thay đổi triển khai DOM theo thời gian, nhưng bạn sẽ luôn có thể đọc trạng thái từ mô hình, thay vì DOM. Đọc sự thật của bạn từ DOM là xấu. Và chậm. Tốt hơn nhiều để kiểm tra mô hình và tin tưởng vào việc triển khai của bạn để đảm bảo rằng trạng thái DOM phản ánh mô hình. (Và sử dụng thử nghiệm tự động để xác nhận giả định đó.)
document.getElementById('snDealsPanel').style.visibility