jQuery 中 html() 方法保存 textarea 当前值的正确实践

jquery 的 `html()` 方法默认不包含 `

在 jQuery 中,,即使用户已输入 “Mango”。

要让 html() 返回带值的 ),核心思路是:在序列化前,显式将每个 。由于 jQuery 的 .html( function ) 支持回调写入,可安全、批量地完成同步:

// ✅ 正确做法:同步 value 到 innerHTML,再获取 html()
function getHtmlWithTextareaValues() {
  // 临时将所有 textarea 的 value 写入其 innerHTML
  $('textarea').html(function() {
    return $(this).val();
  });
  // 此时 html() 将包含用户输入
  return $('#test').html();
}

// 使用示例
$('#saveBtn').on('click', function() {
  const serialized = getHtmlWithTextareaValues();
  console.log(serialized); // 输出: ""
});

⚠️ 重要注意事项

  • 此操作是临时覆盖
  • 若页面含多个
  • 避免在 DOM 渲染关键路径中频繁调用(如输入事件中),建议仅在导出/序列化时触发;
  • 原生替代方案(不依赖 jQuery):element.innerHTML = element.value,但需遍历 NodeList。

总结:html() 本身不感知表单控件状态,必须主动同步。通过 $('textarea').html(fn) 回调注入 .val(),即可生成符合预期的、含用户数据的 HTML 字符串,适用于模板导出、富文本快照等场景。