2012-11-30 18 views
9

Ayrıştırma için büyük SQL komut dosyaları tutmak için kullanılan bir textarea var. Kullanıcı "Ayrıştırma" düğmesini tıkladığında, SQL komut dosyası hakkında özet bilgi alır.textarea'da metin satırı nasıl seçilir

Tıklatıldığında, SQL komut satırının metin içinde vurgulanması için özet bilgilerin tıklanabilir olmasını istiyorum.

Çıktıdaki satır numarasına zaten sahip olduğum için tek ihtiyacım olan şey, textarea'nın hangi satırı vurgulayacağını söyleyen javascript veya jquery.

Bazı "goToLine" işlevi var mı? Bütün aramda, hiçbir şey tam olarak aradığım şeyi ele almıyor.

+0

Bu arada, her şey tek bir sayfada bulunur. Hayır 'gönderir' ya da bir şey. – Ben

+2

buradan başlayın http://stackoverflow.com/questions/646611/programmatically-selecting-partial-text-in-an-input-field or here http://stackoverflow.com/questions/1712417/jquery-wrap-selected -text-in-a-textarea sonra ayrıştırma düğmesi (hiçbir kod verilir) seçim nerede – Popnoodles

cevap

20

Bu fonksiyon, birinci parametre hattı numara olmak için giriş alanlarının ve ikinci parametreye referans olmasını bekler

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

Kullanım:

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

Çalışma örneği:

http://jsfiddle.net/5enfp/

+0

olması gerektiğini bilmeniz gerekir gerekir Bu muhteşem harika. Çok teşekkür ederim! – Ben

+0

Herhangi bir nedenle seçiminizi kaldırmak için kendiniz bulmanız gerekiyor: 'window.getSelection(). RemoveAllRanges()' –

-1

textarea ja'da metin satırı nasıl seçilir Belirli bir satırda çift tıklayın.

//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

Postadaki kod karanlıkheir tarafından düzgün çalışmıyor. Buna dayanarak kodu kısaltdım ve çalışmasını sağladım.



    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

startPos da \ n karakterini bir önceki satırdan seçti, +1 ekleyerek bu işi kurdu (textarea. value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n")> = 0)? textarea.value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n") + 1: 0; ' – Gabriel

İlgili konular