2017-06-05 35 views
0

我需要創建一個javacript函數來下載網頁的html源代碼並返回CSS類被提及的次數。Javascript:如何統計更大字符串中短語的實例數?

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

' string'應該是'str'。順便說一下,你可以發佈html –

+1

你爲什麼認爲你做錯了什麼?你的代碼不能按預期工作嗎?你期望什麼?實際發生了什麼? –

+0

它可以通過任何html代碼。例如,如果我想計算reddit首頁上有多少帖子,我會將reddit.com的html源代碼設置爲一個變量,然後計算「title may-blank」顯示的次數。 – Alex

回答

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."); 
    
+0

請不要低估沒有解釋。如果我錯了,我想知道在哪裏。 – Tomalak

+0

我低估了,因爲問題是重複的,因此應該關閉。回答重複的問題[不好]。(https://meta.stackoverflow.com/questions/309814/is-it-illegal-to-answer-duplicates) –

+1

呃這實際上是一個壞的理由downvote答案。我也看不到社區的共識,那些回答你可以找到重複的問題應該被低估的問題。 – Tomalak

相關問題