javascript - 在 "\n"和 "<br>"之间切换

标签 javascript jquery

#comment的内容

  <p id="comment">
    Here<br>
    it<br>
    is
  </p>

  <button id="view">Edit</button>

应可由用户编辑且换行符 <br>应该切换到\n对于文本区域。

用户编辑后,换行符应再次切换为 <br> .

我希望这能解决问题:

$(document).on("click","#view",function() {
   var $comment = $('#comment');
   var $content = $comment.text().trim().replace("<br>", "\n",  "g");       
   $comment.replaceWith("<textarea name='text' id='textarea'>" + $content + "</textarea>");   
   $('#view').replaceWith('<button id="save">Save</button>');    
});

$(document).on("click","#save",function() {
   var $content = $('#textarea').val().replace(/\n/g, "<br />");
   $('#textarea').replaceWith("<p id='comment'>" + $content + "</p>");
   $('#save').replaceWith('<button id="view">Edit</button>');
});

如果单击“编辑”->“保存”,那么一切似乎都可以正常工作。但如果再次点击编辑,换行符就会消失:

enter image description here

这是一个jFiddle

按两次按钮后换行符去哪里了?

最佳答案

代码:

var $content = $('#textarea').val().replace(/(\n)/g, "$1<br />");

为什么会这样?

您实际上将换行符替换为 <br/> -但你忘记了textarea 需要换行符来确定行中是否有换行符。您正在执行单向转换,之后原始文本的格式不正确。无需替换换行符,只需添加 <br />到该行的末尾。

或者,您可以编写代码来替换 <br />输入 edit 时带有换行符模式,但不能使用.text这样做,因为这仅获取实际文本,而不是元素。

<小时/>

代码片段:

// find elements
var banner = $("#banner-message")
var button = $(".pure")

$(document).on("click","#view",function() {
   var $comment = $('#comment');
   var $content = $comment.text().trim();  	
   $comment.replaceWith("<textarea name='text' id='textarea'>" + $content + "</textarea>");   
   $('#view').replaceWith('<button id="save">Save</button>');    
});

$(document).on("click","#save",function() {

// CHANGED LINE
   var $content = $('#textarea').val().replace(/(\n)/g, "$1<br />");
// ^^^

$('#textarea').replaceWith("<p id='comment'>" + $content + "</p>");
   $('#save').replaceWith('<button id="view">Edit</button>');
});
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

#banner-message {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  font-size: 25px;
  text-align: center;
  transition: all 0.2s;
  margin: 0 auto;
  width: 300px;
}

button {
  background: #0084ff;
  border: none;
  border-radius: 5px;
  padding: 8px 14px;
  font-size: 15px;
  color: #fff;
}

#banner-message.alt {
  background: #0084ff;
  color: #fff;
  margin-top: 40px;
  width: 200px;
}

#banner-message.alt button {
  background: #fff;
  color: #000;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="banner-message">
  <p id="comment">Here<br>
  it<br>
  is</p>
  <br>
  <button id="view">Edit</button>
</div>

关于javascript - 在 "\n"和 "<br>"之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55482014/

相关文章:

javascript - 如何在 React 中合并 &lt;script&gt; 来添加 Google map 实例

javascript - 在 JS 中明确定义时获取 "method undefined"

jquery - 如何从 Kendo Treeview 级联 Kendo 下拉列表

javascript - 如何在 div 中显示 AJAX 响应数据

jquery - 如何获取选择框中的所有选项值(选定/未选定)

javascript - 如何增强不应修改其源代码的页面的功能?

javascript - 如何使用javascript删除css属性?

javascript - 预览/摘要页面

javascript - jquery 数字验证不起作用

使用 for..in 和 MooTools 的 Javascript 数组迭代