2012-03-31 16 views
12

Tamam, bir çözüm bulmak için web'in her yerine bakıyordum ama bulamadım. gibi:JavaScript İmleci kullanmadan önce kelime alın

This is some| demo texts 

Bu kelime "bazı" ... Bu mümkün olup olmadığını bilmiyorum, ben herhangi bir yardım, teşekkürler :) için sevinirim dönmelidir.

+0

Herhangi bir tarayıcı gereksiniminiz var mı? İnsanlar ayrıca jquery'nin tamam olup olmadığını bilmek isteyeceklerdir. – Hemlock

+0

Evet, istediğiniz tüm web dillerini kullanın, tercihen tüm tarayıcılar ama çoğunlukla firefox :) –

cevap

18

here sağlanan Caret Position bulucu yöntemini kullanarak, istediğiniz şeyi yapacağız.

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

Uygulama Burada

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

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

+0

Lütfen jsfiddle yapabilir misiniz? Neden bunu bir textarea içine uygulamak bilmiyorum ... –

+0

'textarea' veya düzenlenebilir' div'? – Hemlock

+0

'|' ile OP, kaynak dizgisinde bulunan gerçek dikey çizgi karakterini değil caret konumunu ifade eder. –

9

Selection ve Range nesneleri kullanarak kaba bir yöntemdir. http://jsfiddle.net/ggfFw/1/:

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 ''; 
} 

Burada eylem görebilirsiniz. Bu IE'de çalışmayacak. IE desteğine ihtiyacınız varsa Rangy kütüphanesine bakın.

+0