2012-03-31 20 views
12

ठीक है, मैं समाधान खोजने के लिए पूरे वेब पर देख रहा हूं लेकिन मुझे कोई नहीं मिला, क्या एक संपादन योग्य div में कैरेट स्थिति से पहले शब्द प्राप्त करने का कोई तरीका है जैसे:जावास्क्रिप्ट कर्सर से पहले शब्द प्राप्त करें

This is some| demo texts 

यह शब्द "कुछ" ... अगर यह संभव है मैं नहीं जानता, मैं किसी भी मदद, धन्यवाद :) के लिए खुशी होगी लौटना चाहिए।

+0

आप किसी भी ब्राउज़र आवश्यकताओं है? लोग जानना चाहेंगे कि jquery ठीक है या नहीं। – Hemlock

+0

हां सभी वेब भाषाओं का उपयोग करें जो आप चाहते हैं, सभी ब्राउज़रों को प्राथमिक रूप से लेकिन मुख्य रूप से फ़ायरफ़ॉक्स :) –

उत्तर

18

कैरेट स्थिति खोजक विधि का उपयोग करने के साथ here यह वही करेगा जो आप चाहते हैं।

function GetCaretPosition(ctrl) { 
     var CaretPos = 0; // IE Support 
     if (document.selection) { 
      ctrl.focus(); 
      var Sel = document.selection.createRange(); 
      Sel.moveStart('character', -ctrl.value.length); 
      CaretPos = Sel.text.length; 
     } 
     // Firefox support 
     else if (ctrl.selectionStart || ctrl.selectionStart == '0') 
      CaretPos = ctrl.selectionStart; 
     return (CaretPos); 
    } 

    function getWordAtPos(s, pos) { 
     var preText = s.substring(0, pos); 
     if (preText.indexOf(" ") > 0 || preText.indexOf("\n") > 0) { 
      var words = preText.split(" "); 
      words = words[words.length - 1].split("\n"); 
      return words[words.length - 1]; //return last word 
     } 
     else { 
      return preText; 
     } 
    } 

    function AlertPrevWord() { 
     var text = document.getElementById("textArea"); 
     var caretPos = GetCaretPosition(text) 
     var word = ReturnWord(text.value, caretPos); 
     if (word != null) { 
      alert(word); 
     } 
    } 

कार्यान्वयन

<input id="textArea" type="text" /> 
<br /> 
<input id="Submit" type="submit" value="Test" onclick="AlertPrevWord()" /> 

http://jsfiddle.net/arrwP/2/

+0

कृपया एक jsfiddle बना सकते हैं? क्योंकि मुझे नहीं पता कि इसे टेक्स्टरेरा में कैसे कार्यान्वित किया जाए ... –

+0

'textarea' या संपादन योग्य' div'? – Hemlock

+0

'ओ' द्वारा ओपी का मतलब कैरेट स्थिति था, न कि स्रोत स्ट्रिंग में मौजूद वास्तविक लंबवत रेखा वर्ण। –

9

यहाँ एक किसी न किसी विधि Selection और Range वस्तुओं का उपयोग कर रहा है।

function getWord() { 
    var range = window.getSelection().getRangeAt(0); 
    if (range.collapsed) { 
     text = range.startContainer.textContent.substring(0, range.startOffset+1); 
     return text.split(/\b/g).pop(); 
    } 
    return ''; 
} 

आप इसे यहां क्रिया में देख सकते हैं: http://jsfiddle.net/ggfFw/1/। यह आईई में काम नहीं करेगा। यदि आपको रंगीन लाइब्रेरी में आईई समर्थन देखने की आवश्यकता है।

+0

खाते में नहीं हैं, तो आप इसे'