如何检测某个位置是否位于textarea中一行的开头?

时间:2016-01-21 00:15:47

标签: javascript jquery html regex

我有这样的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

我该怎么做?

3 个答案:

答案 0 :(得分:3)

textarea的内容存储在value属性中。这里,新行由ASCII新行非打印字符\n表示。我们可以拆分textarea的值来给我们一个包含每一行的数组。

接下来,我们创建另一个数组,它将包含每一行的起始位置。我们将0添加为隐含值。接下来,我们循环遍历整个text数组(从第二行开始,因为我们已经添加了第一行),并且每次都向lines数组添加一个元素lines此前text项的数组值以及此前text项的长度。

这里的逻辑是:

  • lines数组包含所有先前的起始位置
  • 添加到上一个text项目的上一个lines项目的长度会导致(在您的示例中)0 + "this is test1".length = 13,这当然是一次性的。< / LI>
  • 因此,我们添加一个,产生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/

答案 1 :(得分:1)

如果你想知道第n个位置在开头,那么:

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

答案 2 :(得分:1)

JS Fiddle

&#13;
&#13;
var ta = document.getElementById('ta1'),
  taText = ta.textContent;

var lines = taText.trim().split('\n');

for (var i in lines) {
  console.log(lines[i][0]);
}
&#13;
<textarea id="ta1">
this is test1
and this is test2
plus it is test3
</textarea>
&#13;
&#13;
&#13;