通过滚动查找所有元素
Finding all elements with a scroll
查找页面上所有滚动元素的最可靠、最有效的方法是什么?
目前,我正在考虑使用element.all()
和filter()
来比较height
和scrollHeight
的属性值:
element.all(by.xpath("//*")).filter(function (elm) {
return protractor.promise.all([
elm.getAttribute("height"),
elm.getAttribute("scrollHeight")
]).then(function (heights) {
return heights[1] > heights[0];
});
});
但我不确定这种方法的正确性和性能。
这适用于水平和垂直滚动条。如果计算出的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();
它将选择body标记中具有溢出和未溢出滚动的元素:
$('body *').filter(function() {
return ($(this).scrollTop() != 0 || $(this).css('overflow') == 'scroll');
});
相关文章:
- 如何使用jquery迭代具有相同属性的html元素并查找onclick事件
- 如何在不传递此信息的情况下查找被调用的元素
- 查找元素高度,包括边距
- 为什么可以't PHP查找可以使用JS或jQuery访问的元素
- 查找数组javascript中包含的元素类型
- 在AngularJs中查找元素并更改其内容
- JavaScript-如何按类查找元素并删除此类
- 在Meteor中如何查找DOM元素(渲染后)
- jquery在元素中查找文本节点,并使用标记进行连接和包装
- 如何按id查找两个类中任一类的子元素
- 从json数组中查找满足条件的特定元素的值
- 如何通过来自不同父元素的相同元素查找 HTML 元素
- 为动态创建的元素查找前一个同级的值
- HTML5 音频元素 - 查找滑块 - 无法在“HTMLMediaElement”上设置“当前时间”属性:提供的双精度值
- 具有用户添加的行的窗体,以及对每行的输入元素查找
- 选择tr及其“所有子元素”;-查找jquery选择器
- 为每个元素查找data()键值对
- 如何根据兄弟元素中排序的元素查找索引
- 为多类元素中某一类的元素查找Dom节点索引
- 如何使用多行元素查找offsetWidth