选择标题标签时,请删除粗体和斜体格式

时间:2018-10-28 19:08:37

标签: javascript reactjs dom execcommand

我正在用React构建文本编辑器,但我遇到了一个小问题。当我选择一个h1标签并单击“ B”和“ I”时,它仍在格式化。如果选择的文本为h1,我需要以某种方式阻止它或完全禁止格式化。

按钮组件:

class Btn extends Component {
  constructor(){
    super();
    this.clicked = false;
  }
  onClick = e => {
    if(this.clicked && this.props.cmd === 'heading'){
      document.execCommand('formatBlock', false, 'p');
    } else {
      document.execCommand('formatBlock', false, this.props.arg);
      document.execCommand(this.props.cmd, false, this.props.arg);
    }
    this.clicked = !this.clicked;
  }
  render(){
    return <button onClick={this.onClick} id={this.props.id}><li className={"fas fa-" + this.props.name}></li></button>;
  }

演示: https://codesandbox.io/s/vyr6344ljl

1 个答案:

答案 0 :(得分:1)

您的问题标题和描述使您很难确定自己想要什么。

但是,您将状态存储在实例变量中,而不是使用React state变量。

虽然我不确定您遇到的错误到底是什么,但我建议您尝试以下操作:

class Btn extends Component {
  constructor(){
    super();
    this.state = { clicked: false };
  }
  onClick = e => {
    if(this.state.clicked && this.props.cmd === 'heading'){
      document.execCommand('formatBlock', false, 'p');
    } else {
      document.execCommand('formatBlock', false, this.props.arg);
      document.execCommand(this.props.cmd, false, this.props.arg);
    }
    this.setState((state, props) => ({clicked: !state.clicked}));
  }
  render(){
    return <button onClick={this.onClick} id={this.props.id}><li className={"fas fa-" + this.props.name}></li></button>;
  }