2013-03-01 101 views
9

我即將實施Facebook在我的contenteditable div集成如果我給'$'和一些像'a'字符我需要一個自動建議應該彈出靠近我的位置。得到最後一個字符在插入符號前插入位置

我需要知道如何在插入位置前找出最後一個字符,無論是在JavaScript中的IE瀏覽器還是其他瀏覽器。我有權訪問Jquery庫。

(function($) { 
    $.fn.getCursorPosition = function() { 
     var input = this.get(0); 
     if (!input) return; // No (input) element found 
     if ('selectionStart' in input) { 
      // Standard-compliant browsers 
      return input.selectionStart; 
     } else if (document.selection) { 
      // IE 
      input.focus(); 
      var sel = document.selection.createRange(); 
      var selLen = document.selection.createRange().text.length; 
      sel.moveStart('character', -input.value.length); 
      return sel.text.length - selLen; 
     } 
    } 
})(jQuery); 

eg. 
var caretPosition = $("#contenteditablediv").getCursorPosition(); 
var lastchar = getchar(caretposition -1);??? 
+1

該函數將不會在非IE瀏覽器CONTENTEDITABLE元素工作。它用於輸入和textareas。 – 2013-03-01 12:14:05

+0

是的,我知道這只是一個例子..你可以建議我一些其他的方式來找到最後一個字符之前插入位置? – Anoop 2013-03-01 12:17:33

回答

20

下面是如何做到這一點的一個例子。它創建一個範圍,從可編輯元素的開始處開始,在插入符號之前立即結束,獲取範圍的文本並返回該範圍的最後一個字符。

演示:http://jsfiddle.net/MH5xX/

代碼:

function getCharacterPrecedingCaret(containerEl) { 
    var precedingChar = "", sel, range, precedingRange; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount > 0) { 
      range = sel.getRangeAt(0).cloneRange(); 
      range.collapse(true); 
      range.setStart(containerEl, 0); 
      precedingChar = range.toString().slice(-1); 
     } 
    } else if ((sel = document.selection) && sel.type != "Control") { 
     range = sel.createRange(); 
     precedingRange = range.duplicate(); 
     precedingRange.moveToElementText(containerEl); 
     precedingRange.setEndPoint("EndToStart", range); 
     precedingChar = precedingRange.text.slice(-1); 
    } 
    return precedingChar; 
} 
+1

喜歡它的作品魅力。謝謝。我還有一個問題。我正在使用Infragistics內容編輯器。所以在IE中它將是一個div,但在Chrome中它將是一個iframe。我試着用iframe和它的不工作..你能告訴我我將如何在iframe中找到它。謝謝 – Anoop 2013-03-01 12:56:53

+0

@Anoop:您需要替換文檔和窗口對象的文檔和窗口對象的引用iframe。不應該太難。 – 2013-03-01 15:48:15

+0

Thanks.It對我有效。對於使用Iframe的Chrome,我使用document.getElementById('iframe_id')。contentDocument.getSelection()而不是window.getSelection。我用range.setStart(containerEl.contentDocument.body,0); range.setStart(containerEl,0)的insead;再次感謝。你可以建議我任何解決方案此鏈接[如何顯示在內容可編輯div插入符位置附近的自動暗示div](http://stackoverflow.com/questions/15159692/how-to-show-an-auto -suggestion-div-near-the-caret-position-in-a-content-editable) – Anoop 2013-03-02 05:56:44

相關問題