Si sabe que el DIV es solamente va a tener el texto en ella, puede KISS:
var count = document.getElementById('content').innerHTML.split(' ').length;
Si el div puede tener etiquetas HTML en ella, eres va a tener que atravesar sus hijos en busca de los nodos de texto:
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;
Esta es la misma lógica que utiliza la librería jQuery para lograr º El efecto de su función text()
. jQuery es una biblioteca bastante impresionante que en este caso no es necesaria. Sin embargo, si te encuentras realizando una gran cantidad de manipulación de DOM o AJAX, es posible que quieras comprobarlo.
EDITAR:
Como señaló Gumbo en los comentarios, la forma en que se están dividiendo por encima de las cuerdas contaría dos espacios consecutivos como una palabra. Si espera ese tipo de cosas (e incluso si no lo hace), probablemente sea mejor evitarlo dividiendo en una expresión regular en lugar de en un carácter de espacio simple. Teniendo esto en mente, en lugar de hacer la división anterior, usted debe hacer algo como esto:
var count = words.split(/\s+/).length;
La única diferencia es en lo que estamos pasando a la función split.
Vas a tener que conseguir el primer nodo de texto. – cgp
¡perfecto! gracias – givp
Esto contará las etiquetas como palabras, por lo que preferiría la versión de texto() proporcionada por jQuery. – cgp