2010-12-07 58 views
1

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

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 tester:

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

J'utilise Chrome (8.0.552.215) si elle compte.

Répondre

8

La fonction que vous avez trouvée est de trouver le curseur ou la sélection dans une entrée ou une zone de texte, pas un élément contentable. La position du caret/limite de sélection peut être obtenue en termes de nœud DOM et de décalage au sein de ce nœud en utilisant l'objet Selection du navigateur pour obtenir un Range. Je suggère de lire sur ces objets (les liens que j'ai fournis sont un bon point de 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.

+0

Wow, j'étais juste en train de me débattre avec elle hier soir car j'ai découvert que ça ne revenait pas vraiment à la bonne position (j'ai été prévenu par answerer). surtout quand cela devient plus complexe qu'un seul mot par exemple: P Alors merci beaucoup de vérifier cette question déjà posée et de me pointer dans la bonne direction! Je vais vérifier et vous tenir au courant. – PeeHaa

+0

J'ai vérifié votre lib et il semble que c'est la façon la plus facile d'aller compte tenu de tous les «hacks» que je vois dans votre code: P. Cependant, j'ai quelques questions spécifiques sur la façon dont j'utilise la lib pour effectuer les actions spécifiques pour lesquelles je veux l'utiliser. Peut-être pouvez-vous m'aider d'une certaine manière? Merci d'avance! – PeeHaa

+1

@PeeHaa: Bien sûr. Vous pouvez m'envoyer un e-mail ou envoyer des messages au groupe Google: http://groups.google.com/group/rangy –