解决了
问题以一种棘手的方式解决。答案贴在下面。
我有一个带有样式的 textarea 控件,它在编辑新内容、将其存储到数据库中(完整、带有)以及显示为 html 页面的内联部分(在具有相同样式的 div 内)white-space: pre;
时效果很好。\r\n
当我尝试在弹出对话框中使用从 AJAX 响应提供的相同文本区域编辑此类文本时,就会出现问题。我正在尝试通过 jQuery 将接收到的文本分配到 textarea 中:
$('#textfield').html(text);
实际上,在响应中收到了填充了 textarea 的整个对话框。
不幸的是,这个 html-setter 删除了前导换行符。有没有办法消除这种不一致的行为?内容中进一步出现的换行符通常会被预先保存。
从服务器接收到的 html 代码示例:
<textarea id="newtext" cols="60" rows="3" style="white-space:pre;">
Text with line break at its start.
More line break</textarea>
通过将代码html
放入容器后,我得到了这个:
<textarea id="newtext" cols="60" rows="3" style="white-space:pre;">Text with line break at its start.
More line break</textarea>
PS 从上下文中添加了更多代码,尽管我认为这可能不会有所帮助:
JavaScript:
var d = $('#dialog');
console.log(msg); // correct data
console.log('==============');
d.html(msg).css({position: "absolute", top: (pos.top + height) + "px", left: (pos.left + width) + "px"});
console.log(d.html()); // corrupted data
d.show();
$('#newtext').focus();
带有容器的 HTML:
<div id="dialog" class="popup">
</div>
更新:
正如@Pointy 建议的那样,这确实不是 jQuery 的问题。我将 html-setter 替换为普通的旧的:
document.getElementById("dialog").innerHTML = msg;
并遇到了同样的问题。浏览器是 Chrome。目前无法测试其他浏览器。