2012-11-30 3 views
9

구문 분석을위한 방대한 SQL 스크립트를 저장하는 데 사용되는 텍스트 영역이 있습니다. 사용자가 "Parse"버튼을 클릭하면 SQL 스크립트에 대한 요약 정보를 얻습니다.텍스트 영역에서 텍스트 줄을 선택하는 방법

클릭 할 때 요약 정보를 클릭 할 수 있기를 바랍니다. 그러면 SQL 스크립트 행이 텍스트 영역에 강조 표시됩니다.

출력에 줄 번호가 이미 있으므로 필요한 것은 강조 표시 할 텍스트 영역의 줄을 알려주는 javascript 또는 jquery입니다.

"goToLine"의 기능이 있습니까? 내 모든 검색에서 아무것도 내가 찾고있는 주소를 꽤.

+0

그런데 모든 것이 한 페이지에 들어 있습니다. '제출'또는 아무것도 없습니다. – Ben

+2

여기에서 시작 http://stackoverflow.com/questions/646611/programmatically-selecting-partial-text-in-an-input-field 여기 또는 여기 http://stackoverflow.com/questions/1712417/jquery-wrap-selected text-in-a-textarea를 사용하면 구문 분석 버튼 (코드가 제공되지 않음)이 선택 위치를 알 수있는 방법을 알아 내야합니다. – Popnoodles

답변

20

이 함수는 첫 번째 파라미터는 행 번호를 수 있도록 텍스트 영역 및 제 파라미터를 참조로 예상

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

용도 :

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

동작 예 :

http://jsfiddle.net/5enfp/

+0

이것은 환상적입니다. 정말 고맙습니다! – Ben

+0

어떤 이유로 든 선택을 취소해야하는 경우 :'window.getSelection(). removeAllRanges()' –

-1

텍스트 영역에서 텍스트 줄을 선택하는 방법 특정 줄을 더블 클릭하십시오.

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

darkheir의 게시물 코드가 올바르게 작동하지 않습니다. 이를 바탕으로 코드를 단축하고 작동하게했습니다.



    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가 이전 행의 \ n 문자도 선택하고, +1을 추가하면 작업이 고정됩니다. '(textarea. value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n")> = 0)? textarea.value.substring (0, textarea.selectionStart) .lastIndexOf ("\ n") + 1 : 0;' – Gabriel

관련 문제