获取视口Java语言中的所有元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取视口Java语言中的所有元素相关的知识,希望对你有一定的参考价值。

我想知道是否有可能(在javascript或jquery中但没有任何插件)在当前视口中获取所有元素(例如表行tr)而无需遍历每个元素?我发现了很多示例,这些示例如何检查指定元素是否在当前视口中,但是我需要的是一个函数返回当前视口中所有元素的列表。我需要此来进行虚拟化,因为此表应具有无限容量,并且从两百万行的每一行循环效率很低:)

有什么合理的方法可以做到这一点?

答案

假设您对定位没有任何幻想,可以通过二进制搜索找到视口中的表行。例如,对于200000行,大约需要18次查找才能找到页面的第一行(jsfiddle,警告:加载缓慢)。也可以扩展它以查找最后一个元素,或者您可以从第一个元素开始循环浏览,直到找到不再可见的元素。

var rows = table.children().children();
var start = 0;
var end = rows.length;
var count = 0;

while(start != end) {
    var mid = start + Math.floor((end - start) / 2);
    if($(rows[mid]).offset().top < document.documentElement.scrollTop)
        start = mid + 1;
    else
        end = mid;
}

显然,如果有任何东西漂浮,绝对定位等,这将无法正常工作。简而言之:要搜索的节点必须按rows[N-1].top <= rows[N].top的顺序排列。对于诸如表之类的东西,如果不应用样式且不存在多行单元格,则应为true。

以上是关于获取视口Java语言中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

JS常用代码片段2-值得收藏

JS常用代码片段2-值得收藏

在视口中检测元素不适用于移动 Safari

从自定义适配器获取片段中的 UI 元素 ID

如何使用java将数据从片段传递到android中的另一个片段?

如何从 Firebase 获取数据到 Recyclerview 中的片段?