Javascript - 在 dom 中编辑元素时选择不突出显示

Javascript - selection not highlighting when editing element in dom

提问人:Michael Lamprecht 提问时间:11/7/2023 最后编辑:Michael Lamprecht 更新时间:11/7/2023 访问量:23

问:

当我在编辑元素后通过 window.getSelection().addRange() 函数选择一些文本时,该选择不会显示在浏览器 (Chrome) 上。我需要它来提供网站上的搜索/替换功能。因此,当我替换元素中的字符串,然后选择下一个匹配项时,它设置正确,但未突出显示。

这是代码(replace 函数由按钮上的单击事件调用):

replace(text, value) {
    let selection = window.getSelection();
    let contentString = selection.focusNode.textContent;
    let replaceString = contentString.substring(selection.focusOffset - text.length, selection.focusOffset);
    if (replaceString === text) {
        selection.focusNode.textContent = contentString.substring(0, selection.focusOffset - text.length) + value + contentString.substring(selection.focusOffset);
    }
    this.search(text);
    //setTimeout(() => this.search(text), 500); //with this it works
}

搜索函数遍历应该搜索的元素,这是设置范围的部分:

const range = document.createRange();
range.setStart(foundElement.firstChild, index);
range.setEnd(foundElement.firstChild, index + text.length);
window.getSelection().removeAllRanges();
foundElement.scrollIntoView(false);
window.getSelection().addRange(range);

我把搜索功能放在超时状态,然后它就工作了。因此,我假设在进行文本选择时仍然编辑了该元素,但我真的不明白为什么选择可以正常工作,但它只是没有突出显示。 我可以使用超时,它会正常工作,但不会很顺利。有没有其他方法可以解决这个问题?

JavaScript DOM 文本选择

评论

1赞 mplungjan 11/7/2023
请访问帮助中心参观以查看内容和如何提问。做一些研究。如果您遇到困难,请发布一个最小的可重现尝试示例,并使用 [<>] 片段编辑器记录输入和预期输出。
0赞 mplungjan 11/7/2023
是的,使用超时。您可以使用 ,10 而不是 ,500
0赞 freedomn-m 11/7/2023
你如何/在哪里打电话?是在事件中吗?例如事件? 事件?它可能有效,但随后会根据事件在代码之后更新选择范围。因此,它适用于超时,因为它在事件完成后运行。replace()changeclick
0赞 Michael Lamprecht 11/7/2023
我尝试了较短的超时时间,但 500 是我发现的最短的,每次都有效。不知道为什么需要这么长时间。
1赞 Michael Lamprecht 11/7/2023
是的,我正在按钮的点击事件中调用 replace()。

答: 暂无答案