首页 > web前端 > js教程 > 正文

如何在 ContentEditable Div 的插入符处插入 HTML?

Linda Hamilton
发布: 2024-11-11 07:38:03
原创
532 人浏览过

How to Insert HTML at the Caret in a ContentEditable Div?

在 Contenteditable Div 中的插入符号处插入 Html

在 contenteditable div 中,捕获按键可以防止插入不需要的字符。这就提出了直接插入 HTML 元素的要求,例如
标签。虽然为 contenteditable div 中的文本插入提供的解决方案在 IE 中使用 range.pasteHTML 方法工作,但它在其他浏览器中将
标签呈现为纯文本。

使用 insertNode() 插入 HTML

在大多数浏览器中,您可以利用从选择中获取的 Range 的 insertNode() 方法来插入 HTML 节点。 IE 9以下版本仍然支持pasteHTML()。

插入HTML的函数

以下函数可用于在所有主流浏览器中插入HTML:

function pasteHtmlAtCaret(html) {
  var sel, range;
  if (window.getSelection) {
    sel = window.getSelection();
    if (sel.getRangeAt && sel.rangeCount) {
      range = sel.getRangeAt(0);
      range.deleteContents();
      var el = document.createElement("div");
      el.innerHTML = html;
      var frag = document.createDocumentFragment(), node, lastNode;
      while ((node = el.firstChild)) {
        lastNode = frag.appendChild(node);
      }
      range.insertNode(frag);
      if (lastNode) {
        range = range.cloneRange();
        range.setStartAfter(lastNode);
        range.collapse(true);
        sel.removeAllRanges();
        sel.addRange(range);
      }
    }
  } else if (document.selection && document.selection.type != "Control") {
    document.selection.createRange().pasteHTML(html);
  }
}
登录后复制

更新:选择已插入内容

对于插入后想要选择插入内容的场景,可以使用附加参数更新该函数,如下所示:

function pasteHtmlAtCaret(html, selectPastedContent) {
  // Implementation with logic for selecting the inserted content if selectPastedContent is true
}
登录后复制

以上是如何在 ContentEditable Div 的插入符处插入 HTML?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板