账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    基于JavaScript的富文本编辑器,如何实现添加分隔线(<hr>标签)且该操作支持使用系统ctrl-z撤销
    37
    0

    我现在在做一个JavaScript富文本编辑器,遇到了一些问题,js自带的execCommand无法满足以下两个需求:

    1.在该行后面添加分割线(即hr标签),于是我选择直接修改DOM(target是当前选中行,每一行不带格式时候的标签是p)

     var Hr = '<br><p></p><hr id="hr-' + new Date().getVarDate()+ '"/><p></p><br>'
                var HrDOM = parseDom(Hr)
                var target = this.editor.selection._currentRange.startContainer
                var domType = target.__proto__.constructor.name
                if(domType != 'HTMLParagraphElement'){
                    if(domType == 'HTMLLIElement'){
                        if(target.parentElement.parentElement.nextSibling)
                            target.parentElement.parentElement.parentElement.insertBefore(HrDOM, target.parentElement.nextSibling)
                        else
                            target.parentElement.parentElement.parentElement.appendChild(HrDOM)
                    }
                    else if(domType == 'HTMLImageElement'){
                        if(target.nextSibling)
                            target.parentElement.insertBefore(HrDOM, target.nextSibling)
                        else
                            target.parentElement.appendChild(HrDOM)
                    }
                    else{
                        if(target.parentElement.nextSibling)
                            target.parentElement.parentElement.insertBefore(HrDOM, target.parentElement.nextSibling)
                        else
                            target.parentElement.parentElement.appendChild(HrDOM)
                    }
                }
                else{
                    target.innerHTML = Hr
                }

    2.清除格式,js自带的execCommand('removeFormat')只能清除字号大小(h1,h2这一类)或者是加粗颜色属性,并不能对ul、ol、li这一类的列表进行清除,于是我还是直接真个表达式操作DOM

    这两种方式有个坏处就是当我需要ctrl-z撤销这两个操作的时候就不起效了,不知道有没有方法能实现我以上说的功能又不会发生无法撤销这种毛病呢

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部