2012-11-30 18 views
9

Ho un'area di testo che viene utilizzata per contenere enormi script SQL per l'analisi. Quando l'utente fa clic sul pulsante "Analizza", ottengono informazioni di riepilogo sullo script SQL.Come selezionare la linea di testo nella textarea

Desidero che le informazioni di riepilogo siano selezionabili in modo che quando viene fatto clic, la riga dello script SQL sia evidenziata nell'area di testo.

Ho già il numero di riga nell'output, quindi tutto ciò di cui ho bisogno è javascript o jquery che indichi quale riga dell'area di testo evidenziare.

Esiste un tipo di funzione "goToLine"? In tutte le mie ricerche, nulla si rivolge a ciò che sto cercando.

+0

A proposito, tutto è contenuto in una singola pagina. Nessun 'invio' o altro. – Ben

+2

inizia qui http://stackoverflow.com/questions/646611/programmatically-selecting-partial-text-in-an-input-field o here http://stackoverflow.com/questions/1712417/jquery-wrap-selected -text-in-a-textarea quindi devi capire come il tuo pulsante di analisi (nessun codice fornito) sa dove dovrebbe essere la selezione – Popnoodles

risposta

20

Questa funzione si aspetta primo parametro ad essere riferimento alla vostra textarea e secondo parametro di essere il numero di riga

function selectTextareaLine(tarea,lineNum) { 
    lineNum--; // array starts at 0 
    var lines = tarea.value.split("\n"); 

    // calculate start/end 
    var startPos = 0, endPos = tarea.value.length; 
    for(var x = 0; x < lines.length; x++) { 
     if(x == lineNum) { 
      break; 
     } 
     startPos += (lines[x].length+1); 

    } 

    var endPos = lines[lineNum].length+startPos; 

    // do selection 
    // Chrome/Firefox 

    if(typeof(tarea.selectionStart) != "undefined") { 
     tarea.focus(); 
     tarea.selectionStart = startPos; 
     tarea.selectionEnd = endPos; 
     return true; 
    } 

    // IE 
    if (document.selection && document.selection.createRange) { 
     tarea.focus(); 
     tarea.select(); 
     var range = document.selection.createRange(); 
     range.collapse(true); 
     range.moveEnd("character", endPos); 
     range.moveStart("character", startPos); 
     range.select(); 
     return true; 
    } 

    return false; 
} 

Usage:

var tarea = document.getElementById('myTextarea'); 
selectTextareaLine(tarea,3); // selects line 3 

esempio di lavoro:

http://jsfiddle.net/5enfp/

+0

Che è spettacolare. Grazie mille! – Ben

+0

Se per qualche motivo ti ritrovi a dover deselezionare qualsiasi selezione: 'window.getSelection(). RemoveAllRanges()' –

-1

Come selezionare la linea di testo in textarea ja doppio clic su una riga specifica.

//This function expects first parameter to be reference to your textarea. 
function ondblClickSelection(textarea){ 
    var startPos = 0; 
    var lineNumber = 0; 
    var content = ""; 
    if(typeof textarea.selectionStart == 'undefined') { 
     return false; 
    } 
    startPos = textarea.selectionStart; 
    endPos = textarea.value.length; 
    lineNumber = textarea.value.substr(0,startPos).split("\n").length - 1; 
    content = textarea.value.split("\n")[lineNumber]; 
    var lines = textarea.value.split("\n"); 
    var endPos = lines[lineNumber].length+startPos; 
    textarea.selectionStart = startPos; 
    textarea.selectionEnd = endPos; 
    return true; 
} 
1

Il codice nel post di darkheir non funziona correttamente. Sulla base di ciò ho accorciato il codice e l'ho fatto funzionare.



    function onClickSelection(textarea){ 
     if(typeof textarea.selectionStart=='undefined'){ 
      return false; 
     } 
     var startPos=(textarea.value.substring(0,textarea.selectionStart).lastIndexOf("\n")>=0)?textarea.value.substring(0,textarea.selectionStart).lastIndexOf("\n"):0; 
     var endPos=(textarea.value.substring(textarea.selectionEnd,textarea.value.length).indexOf("\n")>=0)?textarea.selectionEnd+textarea.value.substring(textarea.selectionEnd,textarea.value.length).indexOf("\n"):textarea.value.length; 
     textarea.selectionStart=startPos; 
     textarea.selectionEnd=endPos; 
     return true; 
    } 

+1

tuo startPos ha selezionato anche il carattere \ n dalla riga precedente, aggiungendo +1 a esso ha risolto il lavoro '(textarea. value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n")> = 0)? textarea.value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n") + 1: 0; ' – Gabriel

Problemi correlati