"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment détecter efficacement les mots cliqués dans le texte avec JavaScript ?

Comment détecter efficacement les mots cliqués dans le texte avec JavaScript ?

Publié le 2024-11-11
Parcourir:128

How to Efficiently Detect Words Clicked on in Text with JavaScript?

Détecter les mots cliqués dans le texte avec JavaScript

Lors de la création d'un script JavaScript permettant aux utilisateurs de sélectionner des mots en cliquant dessus, la question se pose : comment cela peut-il être réalisé de manière efficace et élégante ?

Méthode verbeuse utilisant l'analyse de classe

Une méthode courante mais Une approche fastidieuse consiste à analyser l'intégralité du code HTML, à diviser chaque mot séparé par des espaces et à envelopper chaque mot dans un élément . Un écouteur d'événement est ensuite ajouté pour détecter les clics sur la classe de mots, et le mot cliqué est obtenu via $(this).innerHTML. Bien que cette méthode fonctionne, ses performances et son esthétique laissent beaucoup à désirer.

Solution optimisée sans analyse de classe

Pour une solution plus efficace et élégante, considérez ce qui suit :

Étape 1 : Capturer la sélection

Utilisez window.getSelection() pour capturer le nom de l'utilisateur. sélection.

Étape 2 : Identifier les limites des mots

Parcourez la plage de sélection pour déterminer les points de début et de fin du mot cliqué, en évitant les espaces.

Étape 3 : Récupérer le mot cliqué

Combinez les caractères identifiés dans la plage de sélection pour former le mot cliqué word.

Exemple d'implémentation

Le code JavaScript suivant fournit une implémentation pratique de cette solution :

$(".clickable").click(function (e) {
  s = window.getSelection();
  var range = s.getRangeAt(0);
  var node = s.anchorNode;

  // Find starting point
  while (range.toString().indexOf(' ') != 0) {
    range.setStart(node, (range.startOffset - 1));
  }
  range.setStart(node, range.startOffset   1);

  // Find ending point
  do {
    range.setEnd(node, range.endOffset   1);
  } while (
    range.toString().indexOf(' ') == -1 &&
    range.toString().trim() != ''
  );

  // Alert result
  var str = range.toString().trim();
  alert(str);
});
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3