javascript - 你如何在 ReactJS 中获得突出显示的文本 (window.getSelection())

标签 javascript reactjs ecmascript-6

我一直在学习制作自定义 markdown 编辑器。但是,我遇到了在用 Markdown 包装之前获取突出显示文本的问题。这是我的 example

class TextArea extends React.Component {
    constructor(props){
    super(props);
    this.state = {
        comment:'He oppose at thrown desire of no. Announcing impression unaffected day his are unreserved indulgence.She oppose at thrown desire of no..'
    };
    this.onClickMakeBold = this.onClickMakeBold.bind(this);
  }

  render(){
    return <div>
       <button onClick={this.onClickMakeBold}>Bold</button> 
         <div>
           <textarea ref="textarea">{this.state.comment}</textarea>
        </div>
    </div>
  }

  onClickMakeBold(){
    console.log(getSelectionText()) 
  }
}
function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control"){
        text = document.selection.createRange().text;
    }else{
            alert('no')
    }
    return text;
}

React.render(<TextArea />, document.getElementById('container'));

getSelectionText() 函数的结果根本不返回任何文本。如何在 ReactJS 中获取高亮文本?

最佳答案

通过单击按钮,您可以在触发事件之前取消选择文本。

将回调作为 onMouseDown 传递给您的按钮,因为此事件发生在标准点击副作用发生之前。

此外:如果您希望文本在处理完事件后保持选中状态,请在回调函数中使用 event.preventDefault()

关于javascript - 你如何在 ReactJS 中获得突出显示的文本 (window.getSelection()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810767/

相关文章:

javascript - Bootstrap 菜单附加在带有品牌形象的滚动时收缩 - 移动行为

javascript - 数据表下拉菜单问题

javascript - 如何使用 React es6 处理多个受控输入?

node.js - Jasmine 监视没有父对象导出并在 NODE 中使用 ES6 导入的函数

javascript - 处理多个 Canvas 上下文的解决方案

javascript - 如何从特定元素中删除快速点击?

android - 任务 ':react-native-get-sms-android:verifyReleaseResources' 的 React Native 构建错误执行失败

reactjs - React modal 总是取 map 函数的最后一个元素

javascript - 无法读取未定义的属性 'userNameInput'

javascript - Es2015 中的大括号