有時候檢查元素是否可見不能單純檢查當前元素的樣式,需要考慮具體情況,下面是一些檢測方法:
:visible Selector | jQuery API Documentation
相關源碼:
code.jquery.com/jquery-1.11.1.js
jQuery.expr.filters.hidden = function( elem ) {
// Support: Opera <= 12.12
// Opera reports offsetWidths and offsetHeights less than zero on some elements
return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
(!support.reliableHiddenOffsets() &&
((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
};
jQuery.expr.filters.visible = function( elem ) {
return !jQuery.expr.filters.hidden( elem );
};
HTMLElement.offsetParent
元素的position
不是fixed
,並且元素不是<body>
or <html>
,可以有一個非常巧妙的方法檢查元素及其父元素的display
是否是none
。參見:javascript - Check if element is visible in DOM - Stack Overflow
// Where el is the DOM element you'd like to test for visibility
function isHidden(el) {
return (el.offsetParent === null)
}