JavaScript 获取页面所有的 tagname

发布于 2023-03-11 17:25:50 字数 1065 浏览 57 评论 0

获取当前页面中所有 HTML tag 的 名字,以数组形式输出, 重复的标签不重复输出。(不考虑 iframe 和 shadowDOM)

关键点

这道题的关键是两点:

1、获取所有的 DOM

如果单纯从算法的角度来看,我们可以先获取到最外层的 HTML 元素,然后通过 children 递归即可。

事实上,我们可以借助一些 API 很简单完成这个功能,比如 window.document.querySelectorAll('*')

2、根据 tagName 去重

如果单纯从算法的角度来看,去重操作可以通过 Set 或者 HashMap 来做。从性能上来说,肯定是 Set, 因为 HashMap 存储的话实际上 value 没有用处。或者我们可以使用快慢指针来做。

代码

function getAllHTMLTags() {
  const tags = [...window.document.querySelectorAll("*")].map(
    dom => dom.tagName
  );
  return [...new Set(tags)];
}

扩展

将所有页面元素按照出现次数降序排序输出。

function getAllHTMLTags() {
  const mapper = {};
  const tags = [...window.document.querySelectorAll("*")].map(
    dom => dom.tagName
  );
  for (let i = 0; i < tags.length; i++) {
      const tag = tags[i];
      if (mapper[tag] === void 0) {
          mapper[tag] = 1;
      }
      else mapper[tag] += 1;
  }

  return Object.entries(mapper).sort((a, b) => b[1] - a[1]).map(q => q[0]);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

尽揽少女心

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文