Obtenir les positions de début et de fin d'une sélection de texte par rapport à son conteneur
Problème :
Considérez le HTML suivant :
<div>
Supposons qu'un utilisateur sélectionne le texte "home" de cet élément. Comment pouvons-nous déterminer les décalages de début et de fin de cette sélection par rapport au conteneur #parent ?
Réponse :
La propriété range.startOffset semble fournir la fonctionnalité souhaitée , mais il représente un décalage uniquement dans le conteneur immédiat. De plus, il ne représente un décalage de caractère que si le conteneur est un nœud de texte.
Code mis à jour :
Voici une version mise à jour du code qui renvoie correctement à la fois le début et décalages de fin :
function getSelectionCharacterOffsetWithin(element) { var start = 0; var end = 0; var doc = element.ownerDocument || element.document; var win = doc.defaultView || doc.parentWindow; var sel; if (typeof win.getSelection != "undefined") { sel = win.getSelection(); if (sel.rangeCount > 0) { var range = win.getSelection().getRangeAt(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; } } else if ((sel = doc.selection) && sel.type != "Control") { var textRange = sel.createRange(); var preCaretTextRange = doc.body.createTextRange(); preCaretTextRange.moveToElementText(element); preCaretTextRange.setEndPoint("EndToStart", textRange); start = preCaretTextRange.text.length; preCaretTextRange.setEndPoint("EndToEnd", textRange); end = preCaretTextRange.text.length; } return { start: start, end: end }; }
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!