2012-11-30 63 views
9

我有一個textarea用於保存大量的SQL腳本進行解析。當用戶點擊「解析」按鈕時,他們會獲得有關SQL腳本的摘要信息。如何選擇textarea中的文本行

我想要點擊摘要信息,以便點擊時,SQL腳本的行在textarea中突出顯示。

我已經在輸出行號,所以我需要的是JavaScript或jQuery,告訴它突出顯示textarea的哪一行。

是否有某種「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

此功能預計第一參數是關於你的textarea和第二參數是行號

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

如何在textarea ja中選擇文本行vascript雙擊特定行。

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

相關問題