Wenn Sie wissen, dass das DIV ist nur gehen Text in ihm haben, können Sie KISS:
var count = document.getElementById('content').innerHTML.split(' ').length;
Wenn die div HTML-Tags in ihm haben können, du bist gehen zu müssen, ihre Kinder zu durchqueren für Textknoten suchen:
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;
Dies ist die gleiche Logik, die die jQuery-Bibliothek verwendet th zu erreichen Der Effekt seiner text()
Funktion. jQuery ist eine ziemlich tolle Bibliothek, die in diesem Fall nicht notwendig ist. Wenn Sie jedoch feststellen, dass Sie eine Menge DOM-Manipulation oder AJAX machen, dann sollten Sie es sich ansehen.
EDIT:
Wie in den Kommentaren von Gumbo erwähnt, ist die Art, wie wir die Saiten spalten über zwei aufeinander folgende Leerzeichen als Wort zählen würde. Wenn Sie solche Dinge erwarten (und selbst wenn Sie das nicht tun), ist es wahrscheinlich am besten, sie zu vermeiden, indem Sie auf einen regulären Ausdruck anstatt auf ein einfaches Leerzeichen aufteilen. Mit diesem Hintergedanken, anstatt die oben Split tun, sollten Sie etwas tun:
var count = words.split(/\s+/).length;
Der einzige Unterschied besteht darin, auf das, was wir vorbei an den split Funktion.
Sie werden zuerst den Textknoten bekommen. – cgp
perfekt! danke – givp
Das wird Tags als Wörter zählen, weshalb ich die von jQuery bereitgestellte text() - Version bevorzugen würde. – cgp