【问题标题】:Why document.execCommand not working in reactjs?为什么 document.execCommand 在 reactjs 中不起作用?
【发布时间】:2020-04-09 20:55:21
【问题描述】:

我正在尝试在我的 react 项目中创建简单的所见即所得编辑器,但无法正常工作 document.execCommand

我指的是codepen(他们在这里使用jQuery库来实现点击功能)

是否可以在 reactjs 中创建简单的所见即所得编辑器?

//document.addEventListener("click", function (e) {});

    const wrapTag = (role) => {
        switch(role) {
            case 'h1':
            case 'h2':
            case 'p':
              document.execCommand('formatBlock', false, role);
              break;
            default:
              document.execCommand(role, false, null);
              break;
          }
    }

    <div onClick={ () => { wrapTag("bold") } }>bold</div>
     <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eveniet saepe nostrum aspernatur deserunt rem neque ab.</p>

【问题讨论】:

  • 问题在于单击时您失去焦点并将焦点放在按钮上。
  • 我尝试使用纯 javascript click document.addEventListener("click", function (e) {});但不是运气,你能告诉我代码兄弟吗? @epascarello

标签: javascript reactjs wysiwyg


【解决方案1】:

您应该添加event.preventDefault,以保持焦点:

    const wrapTag = (role) => {
        document.designMode = "on"
        switch(role) {
            case 'h1':
            case 'h2':
            case 'p':
              document.execCommand('formatBlock', false, role);
              break;
            default:
              document.execCommand(role, false, null);
              break;
          }
    }

    <div onClick={ () => wrapTag("bold") } onMouseDown={(event) => 
        event.preventDefault()}>bold</div>
     <p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Eveniet saepe nostrum aspernatur deserunt rem neque ab.</p>

【讨论】:

  • 我尝试了你的代码,但是当我添加(角色)=>(事件)时没有调用这个函数..@Adam
  • 您还必须更改onClick={ wrapTag("bold") },以便wrapTag 可以接收事件
  • 单击 Fn 工作但不工作脚本,当我单击粗体按钮选择删除时,这意味着 html 重新呈现?
  • 改变了我的答案,现在怎么样?
  • 基于execCommand api你还应该设置document.designMode = "on"
猜你喜欢
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多