Maison >interface Web >js tutoriel >Comment obtenir les décalages de début et de fin d'une sélection dans son conteneur parent ?

Comment obtenir les décalages de début et de fin d'une sélection dans son conteneur parent ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-19 14:12:02189parcourir

How to Get the Start and End Offsets of a Selection within its Parent Container?

Obtenir les décalages de début et de fin d'une plage par rapport à son conteneur parent

Dans les documents HTML, les sélections de l'utilisateur peuvent s'étendre sur différents éléments et nœuds de texte . Déterminer la plage exacte de caractères dans le conteneur parent de la sélection peut être difficile. Cependant, nous pouvons utiliser diverses techniques pour y parvenir, quelles que soient les variantes du navigateur.

Une approche consiste à cloner la plage de sélection et à définir ses points de fin au début et à la fin du conteneur parent. En comparant le contenu du texte résultant avec la plage de sélection d'origine, nous pouvons calculer les décalages de début et de fin par rapport au parent. Voici un exemple en JavaScript :

function getSelectionCharacterOffsetWithin(element) {
  var start = 0;
  var end = 0;
  var preCaretRange = range.cloneRange();
  preCaretRange.selectNodeContents(element);
  preCaretRange.setEnd(range.startContainer, range.startOffset);
  start = preCaretRange.toString().length;
  preCaretRange.setEnd(range.endContainer, range.endOffset);
  end = preCaretRange.toString().length;
  return { start: start, end: end };
}

Cette méthode fournit à la fois les décalages de début et de fin dans le conteneur parent, en tenant compte des balises HTML et de la traversée des nœuds de texte. Il peut être utilisé dans diverses applications nécessitant des décalages de caractères précis, telles que les outils d'édition de texte et les scripts de manipulation de contenu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn