如何检测位置是否位于文本区域中一行的开头

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

本文关键字:区域 一行 开头 文本 于文本 检测 何检测 位置 是否      更新时间:2023-09-26

我有一个这样的文本区域:

<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项的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>