Javascript ContentEditable-按Enter键生成P标记

Javascript ContentEditable-按Enter键生成P标记,javascript,jquery,contenteditable,Javascript,Jquery,Contenteditable,目前我正在使用contenteditable制作一个编辑器。我有以下资料: <div contenteditable="true"> <h2>Header</h2> <p>Content lorem ipsum</p> </div> 标题 同侧内容 当我使用execCommand创建一个新的命令,然后在它之后按enter键时,会创建一个。但是,我希望创建一个。通过使用keyup事件并返回false(使用jQuery),

目前我正在使用contenteditable制作一个编辑器。我有以下资料:

<div contenteditable="true">
<h2>Header</h2>
<p>Content lorem ipsum</p>
</div>

标题
同侧内容


当我使用execCommand创建一个新的命令,然后在它之后按enter键时,会创建一个
。但是,我希望创建一个。通过使用keyup事件并返回false(使用jQuery),我可以完全阻止enter的行为,但是如何在
上强制执行标记呢?(注意,当我已经在标记中时,它已经正确地放置了,但在
中时它不起作用)

对于即将发布的WYMeditor版本,我们已经通过完全覆盖不同的本机实现(包括enter键处理程序)解决了这个问题

要强制使用pargraph(或者更确切地说,重新格式化为段落),可以使用jQuery执行类似的操作(其中元素是DOM节点或jQuery对象):

函数formatElement(元素,标记名){
元素=$(元素);
newElement=$('').append(element.clone().get(0.childNodes);
元素。替换为(新元素);
}
这可以在keyup上完成,您可以使用查看当前选择并调用上述函数来获取新创建的元素

在WYMeditor中,我们还确保实际修改了块元素,以便维护有效的文档结构。如果不是,我们沿着DOM树查找块父级


就像DanielH的解决方案一样,这种方法的缺点是需要实现自己的撤消/重做堆栈,但据我所知,这是唯一可靠的跨浏览器方式。

我也遇到过这个问题——这不是一个很容易解决的问题。您是否需要通过execcommand提供明确的撤消/重做支持?我的解决方案不是撤销/重做。不,不是真的。Control-Z是否仍然有效,还是只是execCommand实现被破坏了?嗨@AndrewM,这个问题有点老了,但我想知道你是否找到了解决方案,因为我也遇到了同样的情况。如果你把它贴在这里就太好了,这样对所有处于相同情况的人都很有用。你能提供完整的代码或者告诉我们代码在WYMeditor的确切位置吗?我非常需要它。谢谢
function formatElement (element, tagName) {
    element = $(element);
    newElement = $('<'+tagName+'/>').append(element.clone().get(0).childNodes);
    element.replaceWith(newElement);
}