【问题标题】:Javascript: How to count number of instances of a phrase in a larger string?Javascript:如何计算较大字符串中短语的实例数?
【发布时间】:2017-06-09 00:42:27
【问题描述】:

我需要创建一个 javacript 函数,用于下载网页的 html 源代码并返回 CSS 类被提及的次数。

var str = document.body.innerHTML;
function getFrequency(str) {
    var freq = {};
    for (var i=0; i<string.length;i++) {
        var css_class = "ENTER CLASS HERE";
        if (freq[css_class]) {
           freq[css_class]++;
        } else {
           freq[css_class] = 1;
        }
    }

    return freq;
};

我在这里做错了什么?

【问题讨论】:

  • string 应该是 str。顺便说一句,你能发布html
  • 你为什么认为你做错了什么?您的代码没有按预期工作吗?您期望什么以及实际会发生什么?
  • 我不明白为什么要重新打开它。再次提到的重复问题完美地回答了这个问题。
  • 不清楚您是要获取当前文档的类名计数(这就是您使用 document,body.innerHTML 的原因)还是其他网页(如问题所述)

标签: javascript html


【解决方案1】:

我在这里做错了什么?

我不想这么说,但从根本上说……一切。获取有关 HTML 的信息不涉及字符串函数或正则表达式。 HTML不能这样处理,它的规则太复杂了。

HTML 需要由 HTML 解析器解析。

在浏览器中有两种可能的情况:

  1. 如果您使用当前的document(您似乎正在这样做),那么解析已经由浏览器完成。

    计算一个 CSS 类实际使用的次数与找出有多少 HTML 元素具有该类是一回事。 可以通过document.querySelectorAll() 和 CSS 选择器轻松完成。

    var elements = document.querySelectorAll(".my-css-class");
    alert("There are " + elements.length + " occurrences of the class.");
    
  2. 如果你有一个从某个地方加载的 HTML 字符串,你需要先解析它。在 JavaScript 中,您可以让浏览器非常轻松地为您解析 HTML:

    var html = '<div class="my-css-class">some random HTML</div>';
    var div = document.createElement("div");
    div.innerHTML = html; // parsing happens here
    

    现在您可以采用与上述相同的策略,只是将div 作为您的选择器上下文:

    var elements = div.querySelectorAll(".my-css-class");
    alert("There are " + elements.length + " occurrences of the class.");
    

【讨论】:

  • 请不要在没有解释的情况下投反对票。如果我错了,我想知道在哪里。
  • 我投了反对票,因为这个问题是重复的,应该这样关闭。回答重复问题是in bad taste.
  • 呃,这实际上是一个不好的理由来否决答案。我还看不到社区没有共识,您可以找到重复的问题的答案应该被否决。
  • 也许不是社区共识,但悬停文本说如果答案没有用,我们应该投反对票。我觉得它没有用,因为此信息已经存在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
  • 2012-01-19
相关资源
最近更新 更多