【问题标题】:Paste </p> closing tag without spawning an opening p tag in contenteditable粘贴 </p> 结束标记,而不在 contenteditable 中生成开始 p 标记
【发布时间】:2012-11-06 01:09:15
【问题描述】:

我有一个可内容编辑的 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 时,&lt;/p&gt;&lt;p&gt;&lt;br/&gt; 会关闭现有段落并打开一个新段落。所以,如果我输入:'hello world' + ENTER,我应该有:

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

您可以在其中识别&lt;/p&gt;&lt;p&gt;&lt;br/&gt; 部分。 我观察到不同的行为。我明白了:

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

因此,似乎第一个&lt;/p&gt; 产生了一个开始的&lt;p&gt; 标记,而在&lt;br/&gt; 标记之前的&lt;p&gt; 产生了一个匹配的结束p 标记。这是否意味着我的浏览器忽略了包装 &lt;p&gt;&lt;/p&gt; 的存在? 当我插入一小段 html 代码时,如何避免产生新的p 标签?

我正在使用 Chromium 和 jQuery 1.7.2。

【问题讨论】:

  • 我想知道这是否与我在这里观察到的行为有关:stackoverflow.com/questions/11570902/…
  • 是的,我认为你是对的。他们说虽然“如果 标签不能与现有的

    标签匹配”,将创建一个 p 元素。在我的情况下,有这个包装

    我认为可以解决它!

标签: jquery html contenteditable


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2019-02-28
  • 1970-01-01
  • 2018-11-19
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
相关资源
最近更新 更多