J'aimerais souligner les phrases longues (disons, 50 mots ou plus) contenues dans une gamme d'objets de paragraphe sur une page, c'est-à-dire J'ai à l'origine essayé de mettre en évidence toutes les phrases, mais a rencontré des problèmes lorsqu'ils contenaient des balises HTML (l'exemple de mise en évidence sur le net semble être réservé aux mots individuels, de sorte qu'ils ne prennent pas compte des nœuds d'enfants). Je suis conscient que la fractionnement des phrases est difficile; J'aimerais utiliser.!? suivi soit par un espace puis une lettre majuscule ou rien du tout (c'est-à-dire la fin du paragraphe). P>
Merci d'avance pour toute aide / conseil. P> $ ("# contenu p") code>. Je ne sais pas comment aborder cela. P>
4 Réponses :
Comme vous l'avez dit, ça va être délicat d'avoir raison, étant donné que vous ne pourrez pas tous les attraper, je collerais quelque chose de simple comme: obtenir Trop intelligent et vous finirez par dépenser plus de temps de coder pour des cas de bord que je suppose que vous voudrez raisonnablement le souhaitez. P> p>
J'ai supposé ici que vous avez votre jQuery à faire la mise en évidence de base?
Si ces paragraphes ont des liens, il ne produira pas ce que vous attendez. Et il y a maintenant lieu à l'avenir pour traiter le code HTML qui couvre des phrases. Mais si les paragraphes sont simples et que le texte est parfait.
Je ne suis pas sûr que la meilleure chose à faire est de le faire du côté du client. Je envisagerais d'envoyer les paragraphes sur le serveur pour faire le travail. Mais le travail devrait être la même de toute une autre manière.
Prenez d'abord tout le contenu d'un paragraphe, assurez-vous de tout faire pour que cela puisse réaliser quelques nœuds dans le DOM. ( Lire ce ) puis vous devra faire un analyseur qui recherche vos personnages fractionnés tout en les ignorant pendant qu'ils sont dans des entités HTML. p>
comme exemple le. Dans un attribut HREF devrait être ignoré et non divisé. Tout en faisant l'analyse, vous pouvez garder un mot compte comme rupture de travail sur les espaces. Faites chaque phrase un objet qui contient la phrase entière et le nombre de mots. Vous pouvez donc pousser ces objets dans un tableau qui représente le paragraphe. Une fois que vous avez fait, vous pouvez ensuite itérer à travers le tableau et envelopper n'importe quelle phrase en une portée pour mettre en évidence avec CSS si le nombre de mots atteint votre seuil. P>
Le problème majeur est des étiquettes qui peuvent être des parties de deux phrases telles que la Suivant. P>
I'm typing <b> in bold. NOW!</b>
C'est probablement une solution plutôt lente et laid aussi, mais il devrait être assez simple à coder: p>
Lire tout le texte dans une chaîne, puis l'analyser, compter des caractères et trouver tous les jours.!? - Personnage. Dans la boucle d'analyse, vous recherchez également Lorsque le tout est fait, faites une autre boucle, cela déplace des sous-chaînes de la première chaîne dans une nouvelle chaîne, prépendiez chaque «phrase longue» avec une balise de surbrillance et ajoute une balise de surbrillance finale à la fin de avant de partir. P>
Lorsque vous avez terminé, mettez la nouvelle chaîne de la chaîne où vous l'avez eue de ... P>
Pour ce faire, vous devez obtenir le code HTML de chaque paragraphe ( Split le texte basé sur un arrêt complet suivi de rien ni de quantité de blancheur pour obtenir vos phrases. Vous devez effectuer cette scission manuellement à l'aide d'une expression régulière correspondante afin que vous puissiez suivre les positions de démarrage et de fin de la phrase dans la chaîne d'origine. P>
Ensuite, divisez chaque phrase sur WhitSpace et supprimez tous les "mots" du tableau qui consiste simplement en espace blanche. Cela vous donne la longueur de la phrase. Si c'est sur votre limite, insérez le code HTML approprié aux positions de démarrage et de fin de la phrase de votre chaîne HTML d'origine. Vous devrez garder une trace de la quantité de HTML supplémentaire que vous avez ajoutée afin que vous puissiez trouver la bonne position de début et de fin des phrases longues ultérieures. P> nœud.html () code>), puis remplacez toutes les balises HTML avec le même nombre d'espaces. Cela devrait être assez simple et car vous pouvez simplement rechercher des supports inclinés et le premier support de fermeture. Vous devez tout d'abord le faire pour éviter tout ces arrêts et mots à l'intérieur de la balise de confondre le reste de l'algorithme, mais aussi d'empêcher une étiquette elle-même comme un mot. p>