2013-03-24 8 views
5

Jak mogę uzyskać słowo w textarrea przez jego bieżącą pozycję opiekuna?Otrzymuj aktualne słowo na stanowisku opiekuńczym

Próbowałem czegoś takiego, ale to zwraca tylko pierwszą literę słowa do postaci w pozycji opiekuna. Np

jeżeli kursor znajduje się pomiędzy FO i O powraca fo a nie foo jak excpected.

Fo | o pasek nie jest równy barowi foo. =>Fo oczekuje, że Foo

Foo bar nie jest równy | al to bar foo. =>equ oczekuje equal.

Oto co zrobiłem do tej pory:

function getCaretPosition(ctrl) { 
    var start, end; 
    if (ctrl.setSelectionRange) { 
     start = ctrl.selectionStart; 
     end = ctrl.selectionEnd; 
    } else if (document.selection && document.selection.createRange) { 
     var range = document.selection.createRange(); 
     start = 0 - range.duplicate().moveStart('character', -100000); 
     end = start + range.text.length; 
    } 
    return { 
     start: start, 
     end: end 
    } 
} 

$("textarea").keyup(function() { 
    var caret = getCaretPosition(this); 

    var result = /\S+$/.exec(this.value.slice(0, caret.end)); 
    var lastWord = result ? result[0] : null; 
    alert(lastWord); 
}); 

http://fiddle.jshell.net/gANLv/

Odpowiedz

5

Spróbuj zmienić tę linię w kodzie do tego:

var result = /\S+$/.exec(this.value.slice(0, this.value.indexOf(' ',caret.end))); 
+0

Nice! Dzięki dużo ... – yckart

+1

To jest niesamowite działa również dla mnie. Jedynym problemem jest to, że ostatnie słowo w tekście obcina ostatni znak, jeśli na końcu tekstu nie ma spacji ... Na przykład 'To jest tekst kopuły' zwróci' tex', jeśli kursor znajduje się na końcu. I 'To jest tekst kopuły' zwróci poprawnie 'tekst'. Czy można to naprawić? –

+0

Dodano wersję, która obsługuje ostatnie słowo w textarea i usuwa śledzący puntuation http://stackoverflow.com/a/40338359/295783 – mplungjan