0

我有一个内容可编辑的 div:

<div id="result" class="content" contenteditable="true"><p><br/></p></div>

我希望在按 ENTER 时形成新段落,为此我拦截 ENTER 键并通过插入 html 代码替换默认操作:

$(".content").on("keydown",function(e){if(e.which == 13) { e.preventDefault(); pasteHtmlAtCaret("</p><p><br/>");}});

我希望当我按 ENTER 时,</p><p><br/>将关闭现有段落并打开一个新段落。所以,如果我输入:'hello world' + ENTER,我应该有:

<p>hello world</p><p><br/></p>

你可以在哪里认出这</p><p><br/>件作品。我观察到不同的行为。我得到:

<p>hello world<p></p><p><br></p></p>

所以似乎第一个</p>产生了一个开始<p>标签,而<p>就在<br/>标签之前产生了一个匹配的结束 p 标签。这是否意味着我的浏览器忽略了 wrapping 的存在<p></p>p当我插入一小段 html 代码时,如何避免产生新标签?

我正在使用 Chromium 和 jQuery 1.7.2。

4

1 回答 1

2

编辑发生在文档对象模型 (DOM) 中。HTML 标签实际上并不存在于编辑器中。HTML 被解析为 DOM。当 DOM 被序列化时,会再次生成 HTML 标签。因此,不正确的 HTML 片段不能被粘贴而没有后果。

于 2012-11-17T14:30:40.920 回答