选择文本并突出显示选择或获取选择值(react)

IT技术 javascript html reactjs electron
2021-03-28 01:04:23

我有一个显示一些跨度的 React 应用程序:

<span>Hello</span> <span>my</span> <span>name</span> <span> is </span> ...

我希望用户像这样用鼠标选择文本 你好我的名字是

..然后获取选定的值,或突出显示文本等。我​​将如何在 React 中执行此操作?我不确定要使用什么事件处理程序以及如何获取当前选择!一个最小的例子或提示将不胜感激!

6个回答

使用onMouseUponDoubleClick事件来检测调用方法,这将使用 JavaScript 选择 API 确定选择。

使用window.getSelection()得到的选择对象。

要获取选定的文本,请使用window.getSelection.toString().

要获取用于渲染弹出菜单的选定文本区域的坐标,请使用selection.getRangeAt(0).getBoundingClientRect().

作为示例实现,请查看react-highlight库。

如果用户在不与鼠标交互的情况下使用键盘中的 Shift + 箭头选择文本会怎样?
2021-06-08 01:04:23
没有这样的用例,因为在浏览网页时,您没有针对不可编辑区域的键盘控制光标。
2021-06-20 01:04:23

对此没有 React 特定的解决方案。只需使用window.getSelection API。


输出突出显示的文本运行 window.getSelection().toString()

你只需要绑定一个 "OnMouseUp" ,然后使用这里介绍的 "getSelection" 方法
2021-05-27 01:04:23
这不能回答问题。
2021-06-18 01:04:23

我认为这是正确的方法...

 document.onmouseup = () => {
   console.log(window.getSelection().toString());
 };

这是 React 中使用函数式组件的示例:

const Post = () => {
    const handleMouseUp() {
        console.log(`Selected text: ${window.getSelection().toString()}`);
    }
    return (
        <div onMouseUp={handleMouseUp}>Text</div>
    );
}

正如 Lyubomir 指出的那样 window.getSelection() API 可以解决问题!

第 1 步: - 最初每次输入内容时,鼠标都会捕获

<textarea type="text" 
          className="contentarea__form__input" 
          onMouseUpCapture={this.selectedText}>
</textarea>

第 2 步:为了确保它只捕获您选择的文本,我使用了 if-else 条件

selectedText = () => {
    window.getSelection().toString() ? console.log(window.getSelection().toString()) : null;
}