如何检测位置是否位于文本区域中一行的开头
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
项的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>
相关文章:
- onkeyup无法动态创建多个文本区域
- FabricJs-限制主对象内添加对象的移动区域
- 文本区域-获取每一行,找到换行符
- 使用VBScript或Javascript从文本框(文本区域)中删除最后一行空/空行
- 如何在文本区域中复制文本的每一行
- 如何使用jquery复制文本区域中的每一行文本
- 如何使用 jQuery 在文本区域中的每一行添加文本
- 通过jQuery在文本区域占位符内新建一行
- 在用户键入时修剪和编辑文本区域的每一行
- 是否可以将光标锁定/聚焦到文本区域的最后一行
- 如何在文本区域中选择(一行或多行)
- 如何检测位置是否位于文本区域中一行的开头
- 到达最后一行时增加文本区域的高度
- 为什么当我试图在html上的文本区域内显示文本时,它会在一行中显示所有内容
- 将文本区域的每一行变成一个链接
- 删除文本区域中的一行
- 如何检测一行何时自动换行到文本区域中?
- 我如何自动完成每一行在文本区域从javascript/jquery的第三个字开始
- 如何仅更改文本区域中的一行
- 文本区域限制字符的每一行在javascript