Có thể kiểm tra xem CSS của một phần tử display == block
hay none
sử dụng JavaScript không?
Câu trả lời:
Như sdleihssirhc nói bên dưới, nếu phần tử display
đang được kế thừa hoặc được chỉ định bởi quy tắc CSS, bạn sẽ cần lấy kiểu tính toán của nó :
return window.getComputedStyle(element, null).display;
Các phần tử có một thuộc style
tính sẽ cho bạn biết bạn muốn gì, nếu kiểu được khai báo nội dòng hoặc bằng JavaScript:
console.log(document.getElementById('someIDThatExists').style.display);
sẽ cung cấp cho bạn một giá trị chuỗi.
currentStyle
gì? không bao giờ nghe nói về nó, cũng đã kiểm tra document.body.currentStyle
và không có gì (không ngạc nhiên)
Nếu kiểu được khai báo nội dòng hoặc bằng JavaScript, bạn chỉ có thể lấy style
đối tượng:
return element.style.display === 'block';
Nếu không, bạn sẽ phải có kiểu tính toán và có những điểm không nhất quán trong trình duyệt. IE sử dụng một currentStyle
đối tượng đơn giản , nhưng những người khác sử dụng một phương thức:
return element.currentStyle ? element.currentStyle.display :
getComputedStyle(element, null).display;
Bắt null
buộc phải có trong Firefox phiên bản 3 trở xuống.
===
và !==
Các toán tử."
===
hơn là ==
ở đây, nhưng cũng không có lợi thế. Cả hai toán hạng đều được đảm bảo là chuỗi, vì vậy cả hai toán tử đều thực hiện chính xác các bước giống nhau.
Đối với jQuery, bạn có nghĩa là như thế này?
$('#object').css('display');
Bạn có thể kiểm tra nó như thế này:
if($('#object').css('display') === 'block')
{
//do something
}
else
{
//something else
}
Câu trả lời này không chính xác như những gì bạn muốn, nhưng nó có thể hữu ích trong một số trường hợp. Nếu bạn biết phần tử có một số thứ nguyên khi được hiển thị, bạn cũng có thể sử dụng điều này:
var hasDisplayNone = (element.offsetHeight === 0 && element.offsetWidth === 0);
CHỈNH SỬA: Tại sao điều này có thể tốt hơn kiểm tra trực tiếp thuộc tính CSS display
? Vì bạn không cần phải kiểm tra tất cả các phần tử cha. Nếu một số phần tử cha có display: none
, phần tử con của nó cũng bị ẩn nhưng vẫn có element.style.display !== 'none'
.
Để tìm hiểu xem nó có hiển thị bằng JavaScript thuần túy hay không, hãy kiểm tra xem thuộc tính hiển thị có phải là "không" hay không (không kiểm tra "khối", nó cũng có thể để trống hoặc "nội dòng" và vẫn hiển thị):
var isVisible = (elt.style.display != "none");
Nếu bạn đang sử dụng jQuery, bạn có thể sử dụng cái này thay thế:
var isVisible = $elt.is(":visible");
Với javascript thuần túy, bạn có thể kiểm tra thuộc style.display
tính. Với jQuery, bạn có thể sử dụng$('#id').css('display')
Bạn có thể kiểm tra nó với ví dụ jQuery:
$("#elementID").css('display');
Nó sẽ trả về chuỗi với thông tin về thuộc tính hiển thị của phần tử này.