Есть ли способ получить весь текст с отрисованной страницы с помощью JS? - PullRequest
4 голосов
/ 07 июня 2010

Есть ли (ненавязчивый для пользователя) способ получить весь текст на странице с помощью Javascript?Я мог бы получить HTML, разобрать его, удалить все теги и т. Д., Но мне интересно, есть ли способ получить текст с уже отредактированной страницы.текст из выбора, я хочу всю страницу.

Спасибо!

Ответы [ 3 ]

7 голосов
/ 15 мая 2012

Вся заслуга ответа Грега W , так как я основал этот ответ на его коде, но я обнаружил, что для веб-сайта без встроенного стиля или тегов сценария его было, как правило, проще использовать :

var theText = $('body').text();

, так как это захватывает весь текст во всех тегах без необходимости вручную устанавливать каждый тег, который может содержать текст.

Кроме того, если вы не будете осторожны, установка тегов вручную имеет тенденцию создавать дублированный текст в выводе, поскольку каждой функции часто приходится проверять теги, содержащиеся в других тегах, в результате чего один и тот же текст захватывается дважды. Использование одного селектора, который содержит все теги, которые мы хотим извлечь из этой проблемы, обходит эту проблему.

Предостережение заключается в том, что если в теге body присутствуют встроенные теги стиля или скрипта, они тоже будут захватываться.

Обновление:

После прочтения этой статьи о innerText Теперь я думаю, что лучший способ получить текст - это простой ванильный js:

document.body.innerText

Как таковой, это не надежный кросс-браузер, но в контролируемых средах он дает лучшие результаты. Прочитайте статью для более подробной информации.

Этот метод форматирует текст, как правило, более читабельным образом, а не не включает содержимое тега или стиля скрипта в вывод.

3 голосов
/ 07 июня 2010

Полагаю, вы могли бы сделать что-то подобное, если не возражаете загрузить jQuery.

var theText;
$('p,h1,h2,h3,h4,h5').each(function(){
  theText += $(this).text();
});

Когда все готово, текст должен содержать большую часть текста на странице. Добавьте любые соответствующие селекторы, которые я, возможно, пропустил.

0 голосов
/ 20 января 2017

В качестве улучшения ответа Грега В. вы также можете удалить «неопределенное» и удалить любые числа, считая, что это не слова.

function countWords() {

    var collectedText;

    $('p,h1,h2,h3,h4,h5').each(function(index, element){
        collectedText += element.innerText + " ";
    });   

    // Remove 'undefined if there'
    collectedText = collectedText.replace('undefined', '');

    // Remove numbers, they're not words
    collectedText = collectedText.replace(/[0-9]/g, '');

    // Get
    console.log("You have " + collectedText.split(' ').length + " in your document.");
    return collectedText;

}

Это можно разбить на массив слов, количество слов; что угодно, правда.

...