J'ai rencontré et résolu ce problème. Voici une fonction qui va le faire en dehors jQuery:
function getInputSelection(el) {
var start = 0, end = 0, normalizedValue, range,
textInputRange, len, endRange;
if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
start = el.selectionStart;
end = el.selectionEnd;
} else {
range = document.selection.createRange();
if (range && range.parentElement() == el) {
len = el.value.length;
normalizedValue = el.value.replace(/\r\n/g, "\n");
// Create a working TextRange that lives only in the input
textInputRange = el.createTextRange();
textInputRange.moveToBookmark(range.getBookmark());
// Check if the start and end of the selection are at the very end
// of the input, since moveStart/moveEnd doesn't return what we want
// in those cases
endRange = el.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
start = end = len;
} else {
start = -textInputRange.moveStart("character", -len);
start += normalizedValue.slice(0, start).split("\n").length - 1;
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
end = len;
} else {
end = -textInputRange.moveEnd("character", -len);
end += normalizedValue.slice(0, end).split("\n").length - 1;
}
}
}
}
return {
start: start,
end: end
};
}
Et un exemple de comment l'utiliser:
$('.myTextArea').click(function(){
var myCaretPos = getInputSelection(this).end;
});
J'ai aussi fait un plug-in jQuery qui inclut cette fonctionnalité, ainsi que autre fonctionnalité relative aux sélections de textarea. Il n'est pas encore sorti mais est stable et testé. La source est ici: http://code.google.com/p/rangy/source/browse/trunk/src/js/modules/textinputs_jquery.js. Exemple:
$('.myTextArea').click(function(){
var myCaretPos = $(this).getSelection().end;
});
Merci Tim, mais mon problème est toujours là. J'ai essayé vos deux solutions mais cela n'a pas fonctionné. Dans IE j'ai encore un caractère supplémentaire pour les sauts de ligne, donc je ne sais pas comment je peux résoudre ça. – Guest
Oh, peut-être que j'ai mal compris. Le problème que mes affaires résolvent est avec les sauts de ligne principaux et traînants dans des textareas dans IE. Les zones de texte dans IE utilisent effectivement '\ r \ n' au lieu de' \ n', mais pourquoi cela vous cause-t-il un problème? –
Merci beaucoup! Maintenant, cela fonctionne parfaitement dans IE. Mais je le problème est toujours là dans Opera. Savez-vous comment je peux mettre en œuvre la même chose pour Opera? – Guest