Если вы знаете, что DIV является только будет иметь текст в нем, вы можете KISS:
var count = document.getElementById('content').innerHTML.split(' ').length;
Если DIV может иметь HTML-теги в нем, вы придется пройти через своих детей ищет текстовых узлов:
function get_text(el) {
ret = "";
var length = el.childNodes.length;
for(var i = 0; i < length; i++) {
var node = el.childNodes[i];
if(node.nodeType != 8) {
ret += node.nodeType != 1 ? node.nodeValue : get_text(node);
}
}
return ret;
}
var words = get_text(document.getElementById('content'));
var count = words.split(' ').length;
Это та же самая логика, которая использует для достижения ю библиотеку Jquery e его функции text()
. jQuery - довольно удивительная библиотека, которая в этом случае не нужна. Однако, если вы обнаружите, что выполняете много манипуляций с DOM или AJAX, вы можете проверить его.
EDIT:
Как отметил Gumbo в комментариях, как мы расщепление строки выше будет засчитываться два последовательных пространства как слово. Если вы ожидаете такого рода вещи (и даже если вы этого не сделаете), то, вероятно, лучше избегать этого, разделив на регулярное выражение вместо простого символа пробела. Имея это в виду, вместо того, чтобы делать выше раскол, вы должны сделать что-то вроде этого:
var count = words.split(/\s+/).length;
Единственное различие состоит в том, что мы мы передаем функции split.
Вы должны получить текстовый узел первым. – cgp
безупречный! спасибо – givp
Это будет считать теги как слова, хотя, поэтому я бы предпочел версию text(), предоставленную jQuery. – cgp