【问题标题】:Highlighting user selected text using javascript使用 javascript 突出显示用户选择的文本
【发布时间】:2021-07-23 12:29:29
【问题描述】:

我面临的问题是,当用户选择任何应该突出显示的文本时,我们正在尝试使用 window.getselction 获取该文本的 DOM 元素并将它们包装在 <span> 中,并使用样式添加背景颜色。它在大多数情况下都可以正常工作,但是在选择列表项时,如果我们只选择一个列表项,那么 <li> tag 内的内容将包含在我们的跨度中并且工作正常,问题在于选择多个 <li> 项目那么这个 span 标签会弄乱列表的 html,我没有得到想要的输出。

function handleSelectedText() {
    var parentOfSel;
    if (typeof window.getSelection != "undefined") {
      parentOfSel = window.getSelection().getRangeAt(0)
    }
    var deviation = document.createElement("span");
    deviation.style.backgroundColor = "cyan";
    deviation.id = "some-id-to-identify-sapn";
    deviation.appendChild(parentOfSel.extractContents());
    parentOfSel.insertNode(deviation);
  }

This function triggers on mouseUp event.

在 React JS 中实现时,如果退出,则打开以使用任何包。

【问题讨论】:

  • 你能提供一个例子和想要的结果吗?

标签: javascript html reactjs dom jodit


【解决方案1】:

作为当今在支持 CSS3 的浏览器中运行的 Web 应用程序,::selection 选择器可以通过以下方式轻松满足您的要求:

::selection { background-color: cyan }

::selection {
  background-color: cyan;
}
<p>Unordered list:</p>

<ul>
  <li>First item</li>
  <li>Second item</li>
  <li>Third item</li>
<ul>

【讨论】:

  • 是的,但问题是我正在使用富文本编辑器,编辑器中的内容被解析为 html 标签,所以我必须在用户突出显示的地方坚持这个选择文本,这样如果再次打开该特定文档,突出显示的文本仍然存在,这就是我试图操纵 DOM 元素的原因。
  • 也许您可以尝试保存选择范围而不是操作 DOM,这样您可以在下次编辑时恢复选择范围。 javascript.info/selection-range
猜你喜欢
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2013-04-07
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
相关资源
最近更新 更多