2017-02-10 3 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

, который сработал! спасибо моему другу :) не могли бы вы отредактировать ответ, который вы разместили, чтобы я мог отметить его как решенный? –

Смежные вопросы