2013-03-24 8 views
5

Come posso ottenere una parola in textarrea in base alla sua posizione attuale?Ottieni la parola corrente sulla posizione di accostamento

Ho provato qualcosa di simile, tuttavia questo restituisce solo le parole prima lettera fino al carattere nella posizione di accento. Ad esempio:

se il cursore si trova tra fo e o restituisce fo e non foo come excpected.

Fo | o bar non è uguale a bar foo. =>Fo si aspetta Foo

La barra di sicurezza non è uguale a | al bar foo. =>equ si aspetta equal.

Ecco che cosa ho fatto finora:

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/

risposta

5

Prova modificare questa riga nel codice a questo:

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

Nizza! Grazie mille ... – yckart

+1

Questo è fantastico funziona anche per me. L'unico problema è che l'ultima parola nel testo taglierà l'ultimo carattere se non c'è spazio alla fine del testo ... Ad esempio, "Questo è il testo della cupola" restituire 'tex' se il cursore è alla fine. E 'Questo è il testo della cupola' ritornerebbe correttamente 'testo'. Questo può essere risolto? –

+0

Aggiunta una versione che gestisce l'ultima parola in textarea e rimuove la puntata finale http://stackoverflow.com/a/40338359/295783 – mplungjan

Problemi correlati