2010-12-07 167 views
1

我發現下面的代碼在這裏SO拿到光標CONTENTEDITABLE DIV的位置,但它總是返回0獲取CONTENTEDITABLE DIV光標位置

應檢索其位置的功能:

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); 

我用它來測試它的代碼:

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

我使用Chrome(8.0.552.215),如果它很重要。

回答

8

您找到的函數用於在輸入或textarea中找到插入符號或選擇內容,而不是contenteditable元素。可以使用瀏覽器的Selection對象根據DOM節點和該節點內的偏移來獲得插入/選擇邊界位置,以獲得Range。我建議閱讀這些對象(我提供的鏈接是一個很好的起點)。在Internet Explorer中,此過程完全不同,但可以使用我的庫來消除差異。

+0

哇,昨天晚上我才掙扎着,因爲我發現它確實沒有回到正確的位置(我被回答者警告過)。特別是當這變得更復雜時,例如只有一個詞:P所以非常感謝你檢查這個已經回答的問題,指出我正確的方向!要檢查出來,並保持張貼。 – PeeHaa 2010-12-10 18:16:48