2017-02-10 30 views
0

這可能是一個簡單的修復,但我無法弄清楚。基本上我打開了一個外部網頁,我想將該網頁上的每個單詞(只是沒有標籤或其他內容)存儲到一個數組中,這樣我就可以輸出每個單詞在頁面上出現多少次。如何統計外部網頁中的每個單詞?

這是外部頁面我使用的測試:

<html> 
<body> 
<p> Hello world! <br/> 
    <a href = 」link.html」> Click <b> here </b> </a> 
    <br/> Goodbye world! 
</p> 
</body> 
</html> 

而且我的輸出是這樣的:

點擊:1次 再見世界!:1次, Hello world!:1次, 這裏:1次

我靠近,我只需要 「再見世界!」和「你好世界!」在空間分裂,但我找不到辦法做到這一點。

這裏是我的代碼:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
    <script type="text/javascript"> 
     var w; 

     function openFile(url) { 
      w = window.open(); 
      w.location = url; 
     } 

     var mainArray = []; 
     var pre; 
     function retrieveText() { 
      pre = document.getElementById("count"); 
      getwords(w.document.body); 
      count(); 
     } 

     function count() { 

      mainArray.sort(); 

      var current = null; 
      var cnt = 0; 
      for (var i = 0; i < mainArray.length; i++) { 
       if (mainArray[i] != current) { 
        if (cnt > 0) { 
         document.write(current + ' : ' + cnt + ' times<br>'); 
        } 
        current = mainArray[i]; 
        cnt = 1; 
       } else { 
        cnt++; 
       } 
      } 
      if (cnt > 0) { 
       document.write(current + ' : ' + cnt + ' times'); 
      } 

     } 

     function getwords(node) { 
      mainArray = w.document.body.innerHTML.replace(/^\s*<[^>]*>\s*|\s*<[^>]*>\s*$|>\s*</g,' ').split(/<[^>]*>/g); 
     } 

    </script> 
</head> 
<body> 
<p>Filename: <input id = "url" name="url" size=15 type="Text"/></p> 
<a href="javascript:openFile(document.getElementById('url').value)"> 
    Open document</a> 
</br> 
<a href="javascript:retrieveText()">Retrieve text</a><br/> 
</br> 
<ul id ="arrlist"></ul> 

</body> 
</html> 

回答

0

我會建議不要使用正則表達式來移除標籤 - 可能就很難分析任何可能的HTML。更換你getwords()功能有:

function getwords(node) { 
    mainArray = node.innerText.replace(/\s+/g, ",").split(","); 
} 

mainArray你可以得到空值太多,但它很容易,如果你需要將它們刪除。

我現在得到:

Click : 1 times 
Goodbye : 1 times 
Hello : 1 times 
here : 1 times 
world! : 2 times 
+0

我只是改變了getwords()像你說的,現在mainArray看起來這對我來說:「[對象」,「HTMLBodyElement]」] –

+0

我嘗試做一些修改例如,因爲我的Chrome不允許讀取本地文件。對於你的情況,試試這個函數只有一行:** mainArray = node.innerText.replace(/ \ s +/g,「,」)。split(「,」); ** – Alexey

+0

工作!謝謝你,我的朋友:)你能編輯你發佈的答案,所以我可以把它標記爲已解決? –

相關問題