【问题标题】:Insert HTML tags into a contentEditable div将 HTML 标签插入 contentEditable div
【发布时间】:2018-07-14 09:07:05
【问题描述】:

我有一个contentEditable div。

问题是当我输入 HTML 标记时,例如 <h1> 然后尖括号在 DOM 中被它们的实体名称 < 和 > 替换。

如何防止这种情况发生?

我希望插入实际的标签而不是 HTML 实体。

这是一个描述问题的 jsFiddle:https://jsfiddle.net/m0xbd2j9/28/

【问题讨论】:

  • 你不能...它是富文本编辑器。
  • 还有其他方法可以做到这一点吗? @Praveen
  • 您可以有一个纯文本框来获取 html 并将其转换为富文本。

标签: javascript html contenteditable


【解决方案1】:

这是预期会发生的。否则,用户很容易弄乱您页面的 HTML。

如果您真的想这样做(我不建议您在生产环境中这样做),您可以拦截 keyup 事件并对元素内容执行替换。类似的东西(为简洁起见,使用 jquery 的未经测试的示例):

var editable = $("#editableDiv");
editable.on("keyup", function(event) {
    // TODO: Better check if event key is either "<" or ">"
    // to avoid extra processing if not necessary.
    editable.html(
        editable.html()
            .replace("&lt;", "<")
            .replace("&gt;", ">")
    );
});

另一方面,如果您只想将内容读取(而不是渲染)为非转义 HTML,您可以简单地在读取过程中进行相同的替换。

提示:在后端,您可能有一些库函数,例如 PHP 中的 html_entity_decode(),它可以为您提供更多功能。

【讨论】:

  • 按说的工作,但是光标有一个奇怪的移动...jsfiddle.net/m0xbd2j9/56
  • 我错过了那个细节(我说这是未经测试的例子吗?;-))。但我认为您可以通过先前读取光标位置并在更改后修复它来克服它。我不确切知道您遇到的是哪个问题,但我可以想象:一方面,根据浏览器的不同,替换内容可以从根本上改变光标位置(因此需要保存以前的位置),并且在另一方面,您正在删除一堆字符以添加单个字符。因此,您还应该修复计算中的差距......检查事件参数以找到您需要的信息。
  • 我想我能做到。我会的。谢谢你的支持。 :-)
猜你喜欢
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 2013-05-08
  • 2021-09-17
  • 2017-05-30
  • 1970-01-01
  • 2013-05-20
相关资源
最近更新 更多