提问人:Aleksandr Fedchenko 提问时间:5/2/2019 最后编辑:Aleksandr Fedchenko 更新时间:5/2/2019 访问量:41
有没有办法在不一次查询所有标签的情况下找到下一个类似的标签?
Is there any way to find next similar tag without querying all tags at once?
问:
我正在尝试为冲浪浏览器实现我自己的链接提示脚本,并且
我一直在页面上遇到明显的性能问题
大量的链接。例如,提示所有提示大约需要 2 秒
https://gunther.suckless.org/patches/ 上有可见链接,https://en.wikipedia.org/wiki/Japan 上有 3 秒。我想,问题是我是
尝试使用(或 - 它在我的
case),然后通过检查的函数过滤所有这些标签
链接是否在视口中(换句话说,链接查找)
过程将大部分时间浪费在不会显示的链接上
无论如何):querySelectorAll("a")
getElementsByTagName("a")
var all_elems = document.body.querySelectorAll("a");
for (var i = 0; i < all_elems.length; i++) {
if (isHintDisplay(all_elems[i])) {
hint_elems.push(all_elems[i]);
}
}
我曾认为,可能是一个更优化的解决方案,“手动”链接标签迭代,一次处理一个链接标签,并在找到不可见链接时停止。
我尝试使用 / / 实现这些迭代,但最终得到了丑陋且绝对不健壮的代码......querySelector("a")
parentElement
nextElementSibling
有没有其他方法可以在不使用 / 的情况下查找上一个/下一个相似标签?或者这些性能问题是 Javascript 本身固有的,无能为力
改善情况?querySelectorAll
getElementsByTagName
P.S. 假设处理后的标签不包含任何 ID 和类。
添加
isHintDisplay的实现:
function isHintDisplay(elem) {
var pos = elem.getBoundingClientRect();
var viewHeight = Math.max(document.documentElement.clientHeight,
window.innerHeight);
return !(pos.bottom < 0 || pos.top - viewHeight >= 0);
}
答: 暂无答案
评论
isHintDisplay
getBoundingClientRect()