在javascript中所选文本的前后插入文本

kninwzqo  于 2023-02-15  发布在  Java
关注(0)|答案(3)|浏览(140)

我想把一些指定的文本(在可能的情况下/任何可编辑的字段)之前和之后的任何选定的文本在一个HTML文档中。document.getSelection()document.selection.createRange().text只返回文本本身没有位置。有无论如何替换选定的文本?无论如何插入特定的文本之前和之后选定的文本在文档中的任何地方?

fxnxkyjh

fxnxkyjh1#

这里有一个跨浏览器的功能来做到这一点,它在所有主要的浏览器和迎合IE做这件事的方式与其他浏览器相比有很大的不同。
示例:http://jsfiddle.net/timdown/UWExN/64/

function insertHtmlAtSelectionEnd(html, isBefore) {
    var sel, range, node;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = window.getSelection().getRangeAt(0);
            range.collapse(isBefore);

            // Range.createContextualFragment() would be useful here but was
            // until recently non-standard and not supported in all browsers
            // (IE9, for one)
            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);
        }
    } else if (document.selection && document.selection.createRange) {
        range = document.selection.createRange();
        range.collapse(isBefore);
        range.pasteHTML(html);
    }
}
6yt4nkrj

6yt4nkrj2#

试试这个:

var r = document.selection.createRange();

r.text = "before" + r.text;
r.text += "after";
bvk5enib

bvk5enib3#

您可以尝试以下代码来获得插入和替换为文本节点和range.insertNode()

文本插入器

function textInserter(isBefore) {
  const selection = window.getSelection();
  const range = selection.getRangeAt(0);
  if (isBefore) {
    range.collapse(true);
  } else {
    range.collapse(false);
  }
  const textNode = document.createTextNode('"Text"');
  range.insertNode(textNode);
}

文本替换

function textReplacer() {
  const selection = window.getSelection();
  const range = selection.getRangeAt(0);
  range.extractContents(); 
  const textNode = document.createTextNode('"Replacing Text"');
  range.insertNode(textNode);
}

您可以检查小提琴:https://jsfiddle.net/gooner12/u25cbdyw/2/

相关问题