2013-03-01 9 views
9

में कैरेट की स्थिति से पहले अंतिम चरित्र प्राप्त करें। मैं अपने संतोषजनक div में एकीकरण में फेसबुक को लागू करने वाला हूं, जहां मैं '$' देता हूं और 'ए' जैसे कुछ चरित्र को मुझे एक ऑटो-सुझाव की आवश्यकता होती है जिसे पॉप अप करना चाहिए मेरी देखभाल की स्थिति के पास।जावास्क्रिप्ट

मुझे यह जानने की जरूरत है कि आईई और अन्य ब्राउज़रों के लिए जावास्क्रिप्ट में कैरेट की स्थिति से पहले अंतिम चरित्र कैसे पता करें। मेरे पास 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

कि समारोह गैर आईई ब्राउज़रों में contenteditable तत्वों के लिए काम नहीं करेगा। यह इनपुट और textareas के लिए है। –

+0

हाँ मुझे पता है कि यह सिर्फ एक उदाहरण था .. क्या आप मुझे देखभाल स्थिति से पहले अंतिम चरित्र खोजने के लिए कुछ और तरीका सुझा सकते हैं ?? – Anoop

उत्तर

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

हाय यह एक आकर्षण की तरह काम करता है। धन्यवाद। मुझे एक और समस्या है। मैं इन्फ्राजिस्टिक्स सामग्री-संपादक का उपयोग कर रहा हूं। तो आईई में यह एक div होगा लेकिन क्रोम में यह एक आईफ्रेम होगा। मैंने आईफ्रेम के साथ प्रयास किया और यह काम नहीं कर रहा .. क्या आप मुझे बता सकते हैं कि मैं इसे आईफ़्रेम में कैसे ढूंढूंगा। धन्यवाद – Anoop

+0

@ एनोप: आपको संदर्भों को 'दस्तावेज़' और 'विंडो' में प्रतिस्थापित करने की आवश्यकता होगी दस्तावेज़ और विंडो ऑब्जेक्ट्स से प्राप्त आईफ्रेम बहुत मुश्किल नहीं होना चाहिए। –

+0

धन्यवाद। यह मेरे लिए काम करता है। आईफ़्रेम के साथ क्रोम के लिए मैंने document.getElementById ('iframe_id') का उपयोग किया। WindowDget.getSelection() window.get चयन के बजाय। और मैंने range.setStart (containerEl.contentDocument.body, 0) का उपयोग किया; range.setStart (कंटेनर एएल, 0) की कीड़े; एक बार फिर धन्यवाद। क्या आप मुझे इस लिंक के लिए कोई समाधान सुझा सकते हैं [सामग्री-संपादन योग्य div में कैरेट स्थिति के पास एक ऑटो सुझाव div कैसे दिखाएं] (http://stackoverflow.com/questions/15159692/how-to-show-an-auto -Suggestion-div-near-the-caret-position-in-a-content-editable) – Anoop

संबंधित मुद्दे