首页 > web前端 > js教程 > 如何使用 JavaScript 在 contenteditable div 中的光标位置插入 HTML?

如何使用 JavaScript 在 contenteditable div 中的光标位置插入 HTML?

Linda Hamilton
发布: 2024-11-12 22:45:02
原创
557 人浏览过

How do I insert HTML at the cursor position in a contenteditable div using JavaScript?

在 Contenteditable Div 的光标处插入 HTML

使用 contenteditable div 时,通常需要在光标处插入 HTML位置。这可以使用 JavaScript 捕获按键事件并阻止 Enter 键的默认行为来完成。

要插入 HTML,我们可以使用 Range 对象的 insertNode() 方法。该方法允许我们将节点插入到 DOM 的指定位置。在大多数浏览器中,除了 IE

这里有一个函数,演示了如何在所有主流浏览器中,无论是否选中内容,在光标位置插入HTML:

function pasteHtmlAtCaret(html, selectPastedContent) {
    var sel, range;
    if (window.getSelection) {
        // IE9 and non-IE
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();

            // Create a document fragment to hold the HTML
            var el = document.createElement("div");
            el.innerHTML = html;
            var frag = document.createDocumentFragment(), node, lastNode;
            while ( (node = el.firstChild) ) {
                lastNode = frag.appendChild(node);
            }

            // Insert the HTML into the document
            range.insertNode(frag);

            // Preserve the selection
            if (lastNode) {
                range = range.cloneRange();
                range.setStartAfter(lastNode);
                if (selectPastedContent) {
                    range.setStartBefore(firstNode);
                } else {
                    range.collapse(true);
                }
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    } else if ( (sel = document.selection) && sel.type != "Control") {
        // IE < 9
        var originalRange = sel.createRange();
        originalRange.collapse(true);
        sel.createRange().pasteHTML(html);
        if (selectPastedContent) {
            range = sel.createRange();
            range.setEndPoint("StartToStart", originalRange);
            range.select();
        }
    }
}
登录后复制

中IE < 9、我们可以使用Range对象的pasteHTML()方法来插入HTML。

这个方法比较灵活,它允许我们指定是否要选择插入的内容。

调用此函数,只需传入要插入的 HTML 和一个布尔值来指示是否选择插入的内容即可。

例如:

pasteHtmlAtCaret('<p>New HTML</p>', true);
登录后复制

以上是如何使用 JavaScript 在 contenteditable div 中的光标位置插入 HTML?的详细内容。更多信息请关注PHP中文网其他相关文章!

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