web-dev-qa-db-fra.com

jQuery: obtenir la position du curseur du texte en entrée sans code spécifique au navigateur?

Existe-t-il un moyen dans jQuery d'obtenir la position actuelle du curseur dans une entrée de texte sans faire de code spécifique au navigateur laid?

Comme dans:

<input id="myTextInput" type="text" value="some text" >

le curseur étant après le "x" de "du texte", je peux obtenir "8"?

28
Ansgar

Vous ne pouvez pas le faire sans du code spécifique au navigateur , car ils implémentent la sélection de texte légèrement différente. Cependant, il existe des plugins qui résument cela. Pour exactement ce que vous recherchez, il y a le plugin jQuery Caret (jCaret) .

Pour que votre code obtienne la position, vous pouvez faire quelque chose comme ceci:

$("#myTextInput").bind("keydown keypress mousemove", function() {
  alert("Current position: " + $(this).caret().start);
});

Vous pouvez le tester ici .

33
Nick Craver

Un avertissement concernant le plugin Jquery Caret.

Il entrera en conflit avec le Plugin d'entrée masquée (ou vice versa). Heureusement, le plugin Masked Input comprend une fonction caret () qui vous est propre, que vous pouvez utiliser de manière très similaire au plugin Caret pour vos besoins de base - $ (element) .caret (). Begin or .end

15
Daniel Gill

Utilisation de la syntaxe text_element.selectionStart on peut obtenir la position de départ de la sélection d'un texte en fonction de l'index du premier caractère du texte sélectionné dans le text_element.value et si nous voulons obtenir la même chose que le dernier caractère de la sélection, nous devons utiliser text_element.selectionEnd.

Utilisez-le comme suit:

<input type=text id=t1 value=abcd>
<button onclick="alert(document.getElementById('t1').selectionStart)">check position</button>

Je vous donne le fiddle_demo

14
Rajesh Paul

vient de tomber pendant la navigation, pourrait vous aider javascript-getting-and-setting-caret-position-in-textarea. Vous pouvez également l'utiliser pour la zone de texte.

7
Chinmayee G