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

问题描述 投票:3回答:1

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

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

javascript algorithm binary-search
1个回答
3
投票

假设您对定位没有任何幻想,可以通过二进制搜索找到视口中的表行。例如,对于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。

© www.soinside.com 2019 - 2024. All rights reserved.