簡體   English   中英

如何檢測位置是否在文本區域中的行首?

[英]How do I detect whether a position is at the beginning of a line in a textarea?

我有這樣的文本區域:

<textarea>
this is test1
and this is test2
plus it is test3
</textarea>

如您所見,此位置位於行的開頭: 0 (t), 14 (a), 32 (p)。


現在,我需要確定位置(我的意思是位置數)是否在一行的開頭?

例如:

10 : false
5  : false
14 : true
40 : false

我怎樣才能做到這一點?

textarea的內容存儲在其value屬性中。 在此,新行用ASCII新行非打印字符\\n 我們可以將textarea的值分開,以得到一個包含每一行的數組。

接下來,我們制作另一個數組,其中將包含每行的起始位置。 我們添加0作為隱含值。 接下來,我們遍歷整個text數組(從第二行開始,因為我們已經添加了第一行),並且每次將一個元素添加到lines數組,該元素是該text項之前的text項的lines數組值和長度在此之前的text項。

邏輯是:

  • lines數組包含所有先前的起始位置
  • 在您的示例中,添加到前一個lines項目中的前一個text項目的長度會導致諸如0 + "this is test1".length = 13,這當然是一個數字。
  • 因此,我們加一個,得出0 + "this is test1".length + 1 = 14,以及14 + "and this is test2".length + 1 = 32。

然后,我們只需測試pos (我們要檢查的位置;傳遞給函數的位置)是否在lines數組中。 如果是,則結果為true ,否則為false

JavaScript代碼:

function testpos(pos) {
    var text = document.getElementById("textareaid").value.split("\n");
    var lines = [0];
    for (i=1;i<text.length;i++) {
        lines.push(lines[i-1]+text[i-1].length+1)
    }
    return lines.indexOf(parseInt(pos))!=-1
}

您將需要此作為HTML:

<textarea id="textareaid">this is test1
and this is test2
plus it is test3</textarea>

而且,這是一個實時演示: https : //jsfiddle.net/g562gtge/

如果您想知道第n個位置在開頭,則:

n == 0 || $("#textbox").val()[n-1] == '\n'

JS小提琴

 var ta = document.getElementById('ta1'), taText = ta.textContent; var lines = taText.trim().split('\\n'); for (var i in lines) { console.log(lines[i][0]); } 
 <textarea id="ta1"> this is test1 and this is test2 plus it is test3 </textarea> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM