Comment obtenir la position du curseur dans un <textarea>
JavaScript?
Par exemple: This is| a text
Cela devrait revenir 7
.
Comment le feriez-vous pour renvoyer les chaînes entourant le curseur / la sélection?
Par exemple: 'This is', '', ' a text'
.
Si le mot «est» est mis en surbrillance, il revient 'This ', 'is', ' a text'
.
javascript
cursor
textarea
caret
Wanderer agité
la source
la source
textarea.selectionStart
,textarea. selectionEnd
,textarea.setSelectionRange
developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElementRéponses:
Avec Firefox, Safari (et d'autres navigateurs basés sur Gecko), vous pouvez facilement utiliser textarea.selectionStart, mais pour IE cela ne fonctionne pas, vous devrez donc faire quelque chose comme ceci:
( code complet ici )
Je vous recommande également de vérifier le plugin jQuery FieldSelection , il vous permet de faire cela et bien plus encore ...
Edit: J'ai en fait réimplémenté le code ci-dessus:
Consultez un exemple ici .
la source
Safari (and other Gecko based browsers)
semble impliquer que Safari utilise Gecko. Gecko est le moteur de Mozilla; Safari utilise WebKit.if (el.selectionStart) { return el.selectionStart; }
...Mis à jour le 5 septembre 2010
Voyant que tout le monde semble être dirigé ici pour ce problème, j'ajoute ma réponse à une question similaire, qui contient le même code que cette réponse mais avec un historique complet pour ceux qui sont intéressés:
Document.selection.createRange d'IE n'inclut pas les lignes vierges de début ou de fin
Tenir compte des sauts de ligne de fin est délicat dans IE, et je n'ai vu aucune solution qui le fasse correctement, y compris d'autres réponses à cette question. Il est cependant possible d'utiliser la fonction suivante, qui vous renverra le début et la fin de la sélection (qui sont les mêmes dans le cas d'un signe d'insertion) dans un
<textarea>
texte ou<input>
.Notez que la zone de texte doit avoir le focus pour que cette fonction fonctionne correctement dans IE. En cas de doute, appelez d'
focus()
abord la méthode textarea .la source
range && range.parentElement() == el
est là pour tester si la sélection est dans la zone de texte et est nécessaire. Il n'y a aucun problème avec la fonction d'obtention de la position du curseur tant que la zone de texte a le focus . En cas de doute, appelez lafocus()
méthode de textarea avant d'appelergetInputSelection()
. J'ajouterai une note à la réponse.mousedown
événement ou l'ajoutunselectable="on"
à l'<div>
élément.J'ai modifié la fonction ci-dessus pour tenir compte des retours chariot dans IE. Il n'a pas été testé mais j'ai fait quelque chose de similaire dans mon code, donc cela devrait être réalisable.
la source
Si vous ne devez pas prendre en charge IE, vous pouvez utiliser
selectionStart
et lesselectionEnd
attributs detextarea
.Pour obtenir la position du curseur, utilisez simplement
selectionStart
:Pour obtenir les chaînes entourant la sélection, utilisez le code suivant:
Démo sur JSFiddle .
Voir aussi la documentation HTMLTextAreaElement .
la source