【问题标题】:How to find the frequencies of all class names in HTML [closed]如何在 HTML 中查找所有类名的频率 [关闭]
【发布时间】:2021-08-25 01:34:04
【问题描述】:

如何获取 DOM 中使用的所有类名的频率?

例如,

<div class='wrapper'>
  <div class='child first'></div>
  <div class='child second'></div>
</div>

可能会给我一个带有输出的对象、地图或数组:

result: {
  wrapper: 1,
  child:   2,
  first:   1,
  second:  1
}

到目前为止,我已经使用 devtools 来检查 DOM,看看是否可以找到任何多次使用的类名。

2021 年 8 月 24 日更新

我不明白这个问题是如何结束的,因为“这个问题似乎与帮助中心定义的范围内的编程无关......”。它可能有一些问题,但它绝对是关于编程的。我想要的只是一个脚本或可以帮助我解决这个问题的东西。

另外,我知道您通常应该尝试自己解决它并展示您以前的尝试,但我完全不知道从哪里开始。而且,正如我所说,我已经进行了一些手动尝试,但它们是不可持续的。

最后,我在 Jeremy 的帮助下解决了这个问题(谢谢)。如果问题再次被打开,我将发布我的解决方案,该解决方案的灵感来自 Jeremy 的。

【问题讨论】:

  • 这样做并不实际。所有这一切都会告诉你一个类名在给定时间出现在给定页面中的次数。由于它们可以通过 JS 动态添加和删除,因此无法安全地以一般方式对其进行计数。
  • 你可以做的是递归地运行 DOM,但正如昆汀所说,你不会得到一切。我也投了反对票,因为you didn't attempt to do it by yourself

标签: javascript html


【解决方案1】:

我真的很想知道如何实现它,所以我试了一下。可能可以清理,但应该让你开始。

我决定不遍历 DOM,因为这可能是一个递归的噩梦,而是选择将页面 HTML 作为字符串并使用正则表达式从元素中提取类。

countClassFrequency = () => {
    const regex = /(class=['|"])([a-zA-Z\s-]*)(['|"])/g;
    let results = {};
    const html = document.documentElement.innerHTML;
    while ((match = regex.exec(html)) !== null) {
       let classes = match[2];
       classes = classes.split(' ');
       classes.forEach(c => {
          if (results[c]) {
             results[c]++;
          } else {
             results[c] = 1;
          }
       });
    }
    return results;
}

const output = countClassFrequency();

console.log(output);
<div class='wrapper'>
  <div class='child first'></div>
  <div class='child second'></div>
</div>

【讨论】:

  • 感谢@Jeremy,这真的很有帮助!
  • 在您的灵感和this 问题的一点帮助下,如果我自己可以这么说的话,我设法创建了一个非常优雅的解决方案。我将在此处链接到它,因为我无法发布任何新答案。 jsfiddle.net/Nermin99/2La5m7vh
  • 啊,这样看起来干净多了。
猜你喜欢
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2010-10-09
相关资源
最近更新 更多