在所需的行设置textarea的值

时间:2016-04-05 16:57:41

标签: javascript html

所以我可以使用这种方法将文本附加到textarea

document.getElementById('myArea').value += msg;

这会将新输入添加到当前输入的末尾。

假设textarea 已包含文本。假设使用“=”而不是“+ =”并且在这种情况下输入textarea已经与新值一起使用的值不是一个可能的解决方案

如何在正确的行上输入新文本到这个textarea,并且相对于已经存在的文本处于正确的位置?

以下是展示问题的YouTube视频

https://www.youtube.com/watch?v=GpwEuI3_73I&feature=youtu.be

更新 每次按下一个键时,我都会发送整个文本区域,而不是一次发送一个字母。显然在计算上更加繁重,但这是我现在唯一的解决方案。如果你有一个更好的解决方案,我仍然有兴趣听听!

2 个答案:

答案 0 :(得分:0)

我假设您只发送最后输入的字符(如原始方法),并存储在名为“newChar”的变量中。

将此视为伪代码,但我希望它不需要进行太多更改才能实际工作:

// deserialize the text of the target textearea
var txt = targetTextarea.text;
var txtAsArray = txt.split(/\r?\n/);
var txtLine = txtAsArray[cursorRowNum];

// write the new character in the right position (but in memory)
txtLine = txtLine.substr(0, cursorColNum) + newChar + txtLine.substr(cursorColNum);

// now serialize the text back and update the target textarea
txtAsArray[cursorRowNum] = txtLine;
txt = txtAsArray.join("\n");
targetTextarea.text = txt;

使用的参考是:How in node to split string by newline ('\n')?

关于性能,这里没有额外的网络活动,我们只访问DOM两次(第一行和最后一行)。请记住,访问DOM比内存中的普通变量慢大约100倍,如http://www.phpied.com/dom-access-optimization/所示。

“txt = txtAsArray.join(”\ n“);”可能需要“txt = txtAsArray.join(”\ r \ n“);”在Windows上。根据Angel Joseph Piscola所指出的How to find the operating system version using JavaScript解释你是否在一个或另一个中。

答案 1 :(得分:-2)

嗨,这会在textarea的现有文本中添加文字 我试过了

 var msg = "Hi How are you ?";
    document.getElementById('myArea').value += msg;