如何在contentEditable div中的游标旁边添加一个html元素。反应Js

时间:2016-11-01 13:34:22

标签: javascript reactjs jsx

我有一个组件,它返回一个contentEditable div。用户可以在div中键入文本。这个div非常类似于textarea。我需要添加一个<span></span>标签,此时光标存在于此处,方法是点击div旁边的按钮。

class EditableDiv extends React.Component {

    addSpan() {
        // return a composed <span> tag
    }

    render() {
        return(
           <div contentEditable
               onInput={(event)=>{this.handleKeyPress(event)}}>
           </div>
           <button onClick={this.addSpan}></button>;
        )
    }
}

1 个答案:

答案 0 :(得分:2)

这是在点击按钮后添加<span></span>的代码。

修改

  

需要在内容可编辑div中添加span。在光标旁边。

我现在处理div handleKeyPress()事件以设置this.state.divValue并添加<span></span>如果:

  • this.state.divValue不为空
  • this.state.buttonPressedtrue(按下按钮)

注意:我不知道您是否已对<div contentEditable组件进行了编码,因此我按照您的说明使用了代码,只添加了value={divValue}部分

class EditableDiv extends React.Component {

  constructor() {
    super();
    // State
    this.state = {
      divValue: '',
      buttonPressed: false
    }
    // Bind
    this.handleKeyPress = this.handleKeyPress.bind(this);
    this.addSpan = this.addSpan.bind(this);
  }

  handleKeyPress(e) {
    this.setState({ divValue: e.currentTarget.value });
  }

  addSpan() {
    this.setState({ buttonPressed: true });
  }

  render() {
    var divValue = this.state.divValue;

    if (this.state.buttonPressed && divValue) {
      divValue += <span></span>;
    }

    return(
       <div>
         <div contentEditable
           onInput={(event)=>{this.handleKeyPress(event)}}
           value={divValue}>
         </div>
         <button onClick={this.addSpan}></button>
       </div>
    );
  }
}