Если вы знаете, что 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 для достижения эффекта своей функции text()
. jQuery - довольно классная библиотека, которая в этом случае не нужна. Однако, если вы обнаружите, что делаете много манипуляций с DOM или AJAX, вы можете проверить это.
EDIT
Как отметил Гамбо в комментариях, то, как мы разбиваем строки выше, будет означать два последовательных пробела как слово. Если вы ожидаете такого рода вещи (и даже если вы этого не делаете), то, вероятно, лучше избегать этого, разделяя регулярное выражение вместо простого пробела. Имея это в виду, вместо того, чтобы делать вышеупомянутое разделение, вы должны сделать что-то вроде этого:
var count = words.split(/\s+/).length;
Единственное отличие состоит в том, что мы передаем функции split .