這適用於水平和垂直滾動條。訣竅是檢測太寬/太短,如果計算的CSS將允許您顯示滾動條。
var ElementsWithScrolls = (function() {
var getComputedStyle = document.body && document.body.currentStyle ? function(elem) {
return elem.currentStyle;
} : function(elem) {
return document.defaultView.getComputedStyle(elem, null);
};
function getActualCss(elem, style) {
return getComputedStyle(elem)[style];
}
function isXScrollable(elem) {
return elem.offsetWidth < elem.scrollWidth &&
autoOrScroll(getActualCss(elem, 'overflow-x'));
}
function isYScrollable(elem) {
return elem.offsetHeight < elem.scrollHeight &&
autoOrScroll(getActualCss(elem, 'overflow-y'));
}
function autoOrScroll(text) {
return text == 'scroll' || text == 'auto';
}
function hasScroller(elem) {
return isYScrollable(elem) || isXScrollable(elem);
}
return function ElemenetsWithScrolls() {
return [].filter.call(document.querySelectorAll('*'), hasScroller);
};
})();
ElementsWithScrolls();
使用香草JS,你可以做這樣的事情'Array.prototype.slice.call(document.querySelectorAll ('*'))。filter(function(el){return el.offsetHeight!== el.scrollHeight})'但是如果你在這個頁面上執行它,你會看到一些沒有滾動條的元素,所以我認爲它不可靠。只是想評論一下,我還沒有具體的答案。 – A1rPun
@AndrewTempleton不用擔心,今天會審查和決定賞金。並感謝您的答案! – alecxe