Nombre de mots Javascript pour tout élément DOM donné
Je me demandais si il existe un moyen de compter les mots à l'intérieur d'un div par exemple. Disons que nous avons un div comme ceci:
<div id="content">
hello how are you?
</div>
Alors la JS fonction retourne un entier de 4.
Est-ce possible? Je l'ai fait avec des éléments de formulaire, mais ne semble pas possible de le faire pour les non-forme.
Des idées?
g
source d'informationauteur givp
Vous devez vous connecter pour publier un commentaire.
Si vous savez que la DIV est seulement va avoir de texte, vous pouvez KISS:
Si le div peut avoir des balises HTML, vous allez avoir à parcourir ses enfants à la recherche pour les nœuds de texte:
C'est la même logique que la bibliothèque jQuery utilise pour obtenir l'effet de son
text()
fonction. jQuery est une assez impressionnante bibliothèque qui dans ce cas n'est pas nécessaire. Cependant, si vous vous retrouver à faire beaucoup de manipulation du DOM ou AJAX, alors vous pourriez vouloir vérifier.MODIFIER:
Comme l'a noté Gumbo dans les commentaires, la façon dont nous coupent les cordes au-dessus de compterait deux espaces consécutifs comme un mot. Si vous vous attendez à ce genre de chose (et même si vous ne le faites pas), il est probablement préférable de l'éviter par fractionnement sur une expression régulière plutôt que sur un simple caractère d'espace. En gardant cela à l'esprit, au lieu de faire au-dessus de split, vous devez faire quelque chose comme ceci:
La seule différence étant que nous sommes de passage à la split fonction.
Paolo Bergantino deuxième solution est incorrecte pour les chaînes vides ou des chaînes qui commencent ou se terminent par des espaces. Voici la solution:
Explication: Si la chaîne est vide, il y a zéro des mots; Si la chaîne a seulement des espaces, il y a zéro des mots; d'Autre, compter le nombre d'espaces de groupes sans ceux du début et de la fin de la chaîne.
semble que c'est une meilleure méthode que la
Au moins, il ne comptera pas "mot" en 2 mots -- ['mot'] au lieu de ['mot', "]. Et il n'a pas vraiment besoin d'un drôle d'ajouter-sur la logique.
Ou simplement l'utiliser Countable.js à faire le travail le plus dur 😉
Je serais assez stricte sur ce qu'un mot est-
Ou vous pouvez faire ceci:
La get_text fonction de Paolo Bergantino la réponse ne fonctionnent pas correctement pour moi quand deux nœuds enfants ont aucun espace entre eux. par exemple <h1>titre</h1><p>point</p> serait retourné comme headingparagraph (avis de manque d'espace entre les mots). Donc, ajouter un espace à la nodeValue corrige ce. Mais il introduit un espace à l'avant du texte, mais j'ai trouvé un nombre de mots de la fonction qui l'habille off (de plus, il utilise plusieurs expressions régulières pour s'assurer qu'il compte mots seulement). Nombre de mots et édité get_text fonctions ci-dessous:
MODIFIER
kennebec du compteur de mots est vraiment bon. Mais celui que j'ai trouvé inclut un certain nombre comme un mot qui est ce dont j'avais besoin. Encore, c'est facile à ajouter à kennebec. Mais kennebec du texte de récupération de la fonction aura le même problème.
string_var.match(/[^\s]+/g).length - 1;