2016-06-29 5 views
-1

Привет, я хотел бы сделать число слов в RTE (Rich Text Editor) с помощью javascript, которое также может использоваться с jquery. Но он не должен считать html-теги и повторять пробелы.Как сделать подсчет слов, содержащий html-теги, используя javascript?

Образец текста:

<p>11 22&nbsp; 33</p><p>44</p>5<br></div>

Javascript должен отображать 5 только.

Есть ли какой-либо javascript-код для этого, а также быстрый способ подсчета количества слов?

Спасибо!

+1

вы видели этот ответ? http://stackoverflow.com/a/14010497/622287 – kevnk

+0

@kevnk Я пробовал принятый ответ, и он дает мне этот другой результат после вставки моего образца текста: Символы (без пробелов): 39 Символы (и пробелы): 41 Words: 3 Линии: 1 – howardtyler

+0

Это можно сделать с помощью свойств jQuery.text() и String.split() и Array.length. Возможно, в одной строке. – tpdietz

ответ

3

Попробуйте что-то вроде этого: Вы получаете HTML в DIV затем удалить все теги и заменить их пробелами. Вы удаляете (обрезаете) все левое и правое пространства и, наконец, разделите строку на массив. Длина - ваш ответ.

var cont = $("#content").html(); 
 
cont = cont.replace(/<[^>]*>/g," "); 
 
cont = cont.replace(/\s+/g, ' '); 
 
cont = cont.trim(); 
 
var n = cont.split(" ").length 
 
alert(n);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="content"> 
 
<p>11 22&nbsp; 33</p><p>44</p>5<br></div>

+0

привет @roxoradev это здорово! более организованный. Можете ли вы объяснить код, который вы там сделали, специфически для регулярного выражения, которое вы сделали, потому что я хочу узнать, что здесь значит для вашего регулярного выражения. Благодаря! :) – howardtyler

+0

Первое регулярное выражение включает теги html, которые заменяются пустым пространством.Второе регулярное выражение удаляет несколько пробелов, например, b -> a b. Если вы думаете, что я вам помог, вы можете отметить этот ответ как решение. Спасибо – Roxoradev

0

Вы можете использовать Countable.js для подсчета живых слов, хотя он не игнорирует HTML-теги.

1

var words = []; 
 
    function getWords(elements) { 
 
    elements.contents().each(function() { 
 
     if ($(this).contents().length > 0) return getWords($(this)); 
 
     if ($(this).text()) words = words.concat($(this).text().split(" ")); 
 
    }) 
 

 
    } 
 

 
    getWords($('<div>').html('<p>11 22&nbsp; 33</p><p>44</p>5<br></div>')); 
 
    console.log(words,words.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Привет @vladu lonut спасибо, но это должно быть 5. Возможно ли это? – howardtyler

+0

@howardtyler Я обновил свой ответ –

1

Вы можете сделать что-то хитрое с помощью JQuery, создав элемент с содержимым.

var str = '<p>11 22&nbsp; 33</p><p>44</p>5<br></div>'; 
 

 
var len = 0; 
 
// create a temporary jQuery object with the content 
 
$('<div/>', { 
 
    html: str 
 
    }) 
 
    // get al child nodes including text node 
 
    .contents() 
 
    // iterate over the elements 
 
    .each(function() { 
 
    // now get number or words using match and add 
 
    len += (this.textContent.match(/[\w\d]+/g) || '').length; 
 
    }); 
 

 
console.log(len);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

hi @pranav C Balan это потрясающая благодарность! Можете ли вы объяснить, что заставляет его работать? потому что я хотел бы узнать больше о методах js. А также для других, чтобы понять, как вы это сделали. – howardtyler

+0

@howardtyler: обновлено более подробно –