2010-06-30 18 views

Répondre

6

Une façon simple serait de boucle juste:

var caretPos = 53, // however you get it 
    start, end 
; 

for (start = caretPos; start >= 0 && myString[start] != "\n"; --start); 
for (end = caretPos; end < myString.length && myString[end] != "\n"; ++end); 

var line = myString.substring(start + 1, end - 1); 
+0

Fonctionne très bien –

3

Conformément à la réponse de nickf, l'exemple suivant (qui utilise jQuery) peut être un peu plus rapide, car il utilise (lastI|i)ndexOf:

function current_line(textarea) { 
    var $ta = $(textarea), 
     pos = $ta.getSelection().start, // fieldselection jQuery plugin 
     taval = $ta.val(), 
     start = taval.lastIndexOf('\n', pos - 1) + 1, 
     end = taval.indexOf('\n', pos); 

    if (end == -1) { 
     end = taval.length; 
    } 

    return taval.substr(start, end - start); 
} 

Ici, il s'agit de on jFiddle.

+0

ne fonctionne pas bien dans IE – andufo

+0

Merci pour l'approche indexOf! –