我有这样的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
我该怎么做?
答案 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)
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;