这是我的代码:
var text = document.getElementById('textarea').value.split(" ").reverse().join(" ");
document.getElementById('textarea').value = text;
当只有一行时它起作用:
LINE ONE > ONE LINE
但是当有多行时:
LINE ONE
LINE TWO
输出是:
TWO ONE
LINE LINE
我想这样:
ONE LINE
TWO LINE
答案 0 :(得分:7)
按换行符\n
拆分数组,用Array#map
迭代每一行,然后将其反转,然后将行加回\n
:
var text = document.getElementById('textarea').value;
var result = text.split('\n').map(function(line) {
return line.split(" ").reverse().join(" ");
}).join('\n');
document.getElementById('textarea').value = result;
<textarea id="textarea">
LINE ONE
LINE TWO
</textarea>
答案 1 :(得分:0)
您需要在.replace( /\n/g, " " )
之前添加.split(" ")
。你会得到:
var text = document.getElementById('textarea').value.replace( /\n/g, " " ).split(" ").reverse().join(" ");
发生这种情况的原因是document.getElementById('textarea').value.split(" ")
创建的数组包含了换行符。例如,如果您在文本区域中输入以下内容:
1 2 3
4 5 6
7 8 9
您将返回的数组是[&#34; 9&#34;,&#34; 8&#34;,&#34;6↵7&#34;,&#34; 5&#34;, &#34;3↵4&#34;,&#34; 2&#34;,&#34; 1&#34;]。注意[2]和[4]处的返回字符。
你的LINE ONE LINE TWO示例将是[&#34; TWO&#34;,&#34;ONE↵LINE&#34;,&#34; LINE&#34;]在被撤销之前,[&#34 ;两个&#34;,&#34;ONE↵LINE&#34;,&#34; LINE&#34;]被颠倒后。然后,当你.join()将它们重新变成一个字符串时,你就会得到非常意想不到的两条线。
.replace( /\n/g, " " )
会在将字符串分解为数组之前将这些换行符更改为空格,从而为您提供所需的结果。