从窗口中选择的文本为空

问题描述 投票:0回答:1

我正在尝试将所选字符串包装在两个字符之间例如:选择“测试”并单击“更改”按钮会将所选文本更改为“ atestb”问题是,我能够替换选定的文本,但是window.getSelection()。toString()变为空。这是即时通讯使用的功能

  replaceSelectedText(startTag, endTag) {
    let sel, range;
    console.log(window.getSelection().toString())
    if (window.getSelection) {
      sel = window.getSelection();
      if (sel.rangeCount) {
        range = sel.getRangeAt(0);
        range.deleteContents();
        const selectedContent = sel.toString();
        console.log("Selected Content ")
        console.log(selectedContent)
        let replaceDiv = startTag + selectedContent;
        replaceDiv=endTag ? replaceDiv + endTag : replaceDiv;
        range.insertNode(document.createTextNode(replaceDiv));
      }
    } else if ((document as any).selection && (document as any).selection.createRange) {
      range = (document as any).selection.createRange();
      range.text = startTag;
    }
  }

链接到Stackblitzhttps://stackblitz.com/edit/angular-idyhj5?file=src%2Fapp%2Fapp.component.ts

javascript angular dom
1个回答
2
投票

您要在检索值之前删除它。

range.deleteContents();
const selectedContent = sel.toString();

如果您翻转这两行并在删除前存储内容,它将按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.