有什么方法可以找到下一个类似的标签,而无需一次查询所有标签?

时间:2019-05-01 22:43:29

标签: javascript jquery performance html-parsing

我正在尝试为冲浪浏览器实现自己的链接提示脚本,并且 我一直在遇到带有 大量链接。例如,提示所有内容大约需要2秒 在https://gunther.suckless.org/patches/上显示可见链接,在上显示3秒 https://en.wikipedia.org/wiki/Japan。我认为,问题在于我 尝试使用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来实现这些迭代,但是最终得到了难看且绝对不健壮的代码...

是否有其他方法可以找到上一个/下一个类似标签而无需使用 querySelectorAll / getElementsByTagName?或这些性能问题是Javascript本身固有的,没有太多可以做的事情。 改善情况?

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);
}

0 个答案:

没有答案