从textarea复制到div,保留换行符

Xav*_*vio 16 html javascript jquery textarea

我有一个<textarea>和一个<div>(有一个<p>内部).在区域中输入文本时,<p>会在keyUp上更新内容.

有没有办法保留textarea的换行符(新行),并以某种方式使它们像div/p中的换行符一样工作?

替换双"新线" </p><p>,是否也可以?这接近于所见即所得,但不希望这样,这是一个非常小的项目.


这是我到目前为止所得到的.

$(".box textarea").keyup(function () {
  var value = $(this).val();  
  $('.box p').text(value);
});
Run Code Online (Sandbox Code Playgroud)

Exp*_*lls 40

您可能要添加的CSS规则white-space: prewhite-space: pre-wrap.box p.这将按原样显示空白.

  • 这应该是公认的答案.换行符是换行符,而不是新段落,使用css而不是jQuery始终是首选解决方案恕我直言... (4认同)
  • 这可能是最好的答案. (2认同)

pal*_*aѕн 14

你可以这样做:

$('.box textarea').keyup(function() {
    var value = $(this).val().replace(/\n/g, '<br/>');
    $(".box p").html(value);
});
Run Code Online (Sandbox Code Playgroud)

这将替换元素中的所有换行符\n,textarea并用html <br/>标记替换它们,这样您就可以在textarea里面<p>标记元素中保留换行符.

简单演示:

$('.box textarea').keyup(function() {
  $(".box p").html(this.value.replace(/\n/g, '<br/>'));
});
Run Code Online (Sandbox Code Playgroud)
textarea,p {
  width: 90%;
  height: 80px;
}
p {
  border: 1px solid #eee;
  padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  <textarea></textarea>
  <br/>
  <p></p>
</div>
Run Code Online (Sandbox Code Playgroud)

如果您可以更改css文件,那么您也可以按照@Explosion Pills的建议尝试以下解决方案.即使您仍然必须在此处使用jquery代码将textarea输入的文本p添加到keyup事件上的标记,例如:

$('.box textarea').keyup(function() {
  $(".box p").html(this.value);  // replace is not needed here
});
Run Code Online (Sandbox Code Playgroud)
textarea,p {
  width: 90%;
  height: 80px;
}
p {
  border: 1px solid #eee;
  padding: 5px;
  white-space: pre; // <--- This is the important part
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  <textarea></textarea>
  <br/>
  <p></p>
</div>
Run Code Online (Sandbox Code Playgroud)