当用户点击submit时,我在文本区域中获取值。然后取这个值并将其放在页面的其他位置。但是,当我这样做时,它会丢失换行符,这使得输出非常难看。
以下是我正在访问的文本区域:
<textarea id="post-text" class="form-control" rows="3" placeholder="What's up?" required></textarea>
下面是访问文章并对其进行转录的javascript代码。
var post = document.createElement('p');
var postText = document.getElementById('post-text').value;
post.append(postText);
var card = document.createElement('div');
card.append(post);
var cardStack = document.getElementById('#card-stack');
cardStack.prepend(card);
当输入类似于:
团体时间表:
星期二五楼练习(晚上8时至11时)
星期四在五楼练习(晚上8时至11时)
周日练习(晚上九时至上午十二时)
输出为:
团体时间表:星期二在五楼练习(晚上8点至11点),星期四在五楼练习(晚上8点至11点),星期日练习(晚上9点至上午12点)
那么有没有办法保留换行符呢?
7条答案
按热度按时间ui7jx7zq1#
以下是一个想法,因为在一个文本框中可能有多个换行符:
此html值将保留换行符。希望这有帮助。
bf1o4zei2#
你可以设置
width
使用javascript和add创建div的white-space:pre-wrap
到p tag
,这将在每行末尾打断文本区域内容。rvpgvaaj3#
我想您不希望将textarea内容解析为html。在这种情况下,您可以将其设置为纯文本,这样浏览器就不会将其视为html,也不会删除不需要css或预处理的换行符。
f2uvfpb94#
这里也有类似的问题
检测文本输入区域中的换行符
检测文本区域中的换行
您可以尝试以下方法:
var submit = document.getElementById('submit');
submit.addEventListener('click', function(){
var content = '';
var textContent = document.querySelector('textarea').value;
content += textContent;
content += '';
document.getElementById('output').innerHTML = content;
});
This is some text
this is another text
Another text again and again
wj8zmpe15#
最简单的解决方案是使用以下css属性简单地设置要插入文本的元素的样式:
此属性导致匹配元素中的空格和换行符的处理方式与
<textarea>
. 也就是说,连续的空格不会折叠,行在显式换行处断开(但如果超过元素的宽度,也会自动换行)。鉴于到目前为止,这里发布的几个答案都容易受到html注入的攻击(例如,因为它们将未经扫描的用户输入分配给
innerHTML
)或者其他错误,让我根据您的原始代码给出一个如何安全正确地执行此操作的示例:请注意,与原始代码一样,上面的代码段使用
append()
及prepend()
. 在撰写本文时,这些函数仍被认为是实验性的,并非所有浏览器都完全支持。如果您希望安全并与较旧的浏览器保持兼容,可以很容易地替换它们,如下所示:element.append(otherElement)
可以替换为element.appendChild(otherElement)
;element.prepend(otherElement)
可以替换为element.insertBefore(otherElement, element.firstChild)
;element.append(stringOfText)
可以替换为element.appendChild(document.createTextNode(stringOfText))
;element.prepend(stringOfText)
可以替换为element.insertBefore(document.createTextNode(stringOfText), element.firstChild)
;作为特例,如果
element
都是空的element.append(stringOfText)
及element.prepend(stringOfText)
可以简单地用element.textContent = stringOfText
.下面是与上面相同的代码片段,但没有使用
append()
或prepend()
:如果你真的不想用css来做这件事
white-space
属性,另一种解决方案是显式地将文本中的任何换行符替换为<br>
html标签。棘手的部分是,为了避免引入微妙的bug和潜在的安全漏洞,您必须首先转义任何html元字符(至少,&
及<
)在执行此替换之前,请在文本中输入。可能最简单、最安全的方法是让浏览器为您处理html转义,如下所示:
请注意,虽然这将修复换行符,但不会阻止html呈现程序折叠连续的空白。可以(某种程度上)通过用不间断的空格替换文本中的一些空白来模拟这种情况,但老实说,对于一些可以用一行css轻松解决的问题来说,这变得相当复杂。
c9x0cxw06#
目标容器应具有
white-space:pre
风格在下面试试。mqkwyuun7#
您可以将textarea行拆分为数组:
然后用它来生成,也许,更多的p标签。。。