Récupère la position du curseur dans une div contenteditable

J’ai trouvé le code suivant ici sur SO pour obtenir la position du curseur d’un div contenteditable, mais il retourne toujours 0.

La fonction qui devrait récupérer la position:

new function($) { $.fn.getCursorPosition = function() { var pos = 0; var input = $(this).get(0); // IE Support if (document.selection) { input.focus(); var sel = document.selection.createRange(); var selLen = document.selection.createRange().text.length; sel.moveStart('character', -input.value.length); pos = sel.text.length - selLen; } // Firefox support else if (input.selectionStart || input.selectionStart == '0') pos = input.selectionStart; return pos; } } (jQuery); 

Le code que j’utilise pour le tester:

 $('div.MESSAGE_OF_DAY').keyup(function() { alert($(this).getCursorPosition()); // always returns 0??? }); 

J’utilise Chrome (8.0.552.215) si cela compte.

La fonction que vous avez trouvée permet de rechercher le curseur ou la sélection dans une entrée ou une zone de texte, et non un élément contenteditable. La position des limites caret / selection peut être obtenue en termes de nœud DOM et décalée dans ce nœud à l’aide de l’object Selection du navigateur pour obtenir une Range . Je suggère de lire sur ces objects (les liens que j’ai fournis sont un bon sharepoint départ). Dans Internet Explorer, ce processus est complètement différent, mais vous pouvez utiliser ma bibliothèque Rangy pour éliminer les différences.