我在数据库中存储内容,例如:
Hello
This
is
Text
当我将它传递给textarea时,它会保留新的换行符。但是,如果我将该文本传递给内容可编辑的div,它将保持这样:
Hello This is Text
如何解决此问题?
答案 0 :(得分:108)
在div上设置样式:white-space: pre
或white-space: pre-wrap
答案 1 :(得分:4)
要在@Explosion Pills正确答案中添加一些信息,并从MDN中提取一些信息:
CSS white-space
属性可以帮助您:
white-space: pre
保留空白序列。线只在 源代码和
<br>
元素中的换行符。
这可能会导致不必要的水平滚动条,如示例所示!
white-space: pre-wrap
保留空白序列。行在换行符处断开 字符,
<br>
,并根据需要填充行框。
正如@ceremcem所指出的,当复制粘贴文本时,框末尾的换行符不会被传送,这是有道理的,因为这些换行符不是文本格式的一部分,而是文本格式的一部分。视觉外观。
white-space: pre-line
空白序列已折叠。行在换行符处断开 字符,
<br>
,并根据需要填充行框。
div{
border: 1px solid #000;
width:200px;
}
.pre {
white-space: pre;
}
.pre-wrap{
white-space: pre-wrap;
}
.pre-line{
white-space: pre-line;
}
.inline-block{
display:inline-block
}
<h2>
pre
</h2>
<div class="pre" contenteditable=true>Lorem ipsum dolor sit amet doesn't have a meaning but here comes 10 white spaces:____ ____</div>
<h2>
pre-wrap
</h2>
<div class="pre-wrap" contenteditable=true>Lorem ipsum dolor sit amet doesn't have a meaning but here comes 10 white spaces:____ ____</div>
<h2>
pre-line
</h2>
<div class="pre-line" contenteditable=true>Lorem ipsum dolor sit amet doesn't have a meaning but here comes 10 white spaces:____ ____</div>
<h2>
Chrome FIX
</h2>
<div class="pre-line inline-block" contenteditable=true>Lorem ipsum dolor sit amet doesn't have a meaning but here comes 10 white spaces:____ ____</div>
在Chrome中,您可能会遇到麻烦:按 Enter 会在内容可编辑内容中生成一个新的<div>
。为防止这种情况,您可以按 Shift + Enter 或将display: inline
设置为可编辑的<div>
,如小提琴所示。
答案 2 :(得分:2)
您可以使用<br />
搜索和替换换行符。
http://jsfiddle.net/fPv6S/1/