Javascript:如何计算较大字符串中短语的实例数?

时间:2017-06-05 18:01:13

标签: javascript html

我需要创建一个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;
};

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

  

我在这里做错了什么?

我不想说,但从根本上说......一切。获取有关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.");