vue3使用VueQuill插入自定义内容

使用的富文本插件为VueQuill

html如下

 <QuillEditor
                        ref="quillEditor"
                        @click="handClick"
                        @textChange="handOnkeyup"
                        v-model:content="formState.content"
                        :options="options"
                    ></QuillEditor>

记录光标,关键就在这里

  // 最后一次的range对象
        let lastRange: any = null
        const handClick = () => {
            let selection: any = document.getSelection()
            // 保存最后的range对象
            lastRange = selection.getRangeAt(0)
        }
        const handOnkeyup = () => {
            let selection: any = document.getSelection()
            // 保存最后的range对象
            lastRange = selection.getRangeAt(0)
        }

点击内容插入,可自定义内容,其中e.name就是我传递进来的,可自行修改

 if (window.getSelection && lastRange) {
               let selection = window.getSelection();
                if (selection && selection.getRangeAt && selection.rangeCount) {
                    let addText = (dow: string) => {
                        lastRange.deleteContents();
                        var el = document.createElement("div");
                        el.innerHTML = dow;
                        var frag = document.createDocumentFragment(), node, lastNode;
                        while ((node = el.firstChild)) {
                            lastNode = frag.appendChild(node);
                        }
                        lastRange.insertNode(frag);
                        if (lastNode) {
                            lastRange = lastRange.cloneRange();
                            lastRange.setStartAfter(lastNode);
                            lastRange.collapse(true);
                            selection?.removeAllRanges();
                            selection?.addRange(lastRange);
                        }
                    }
                    
                    addText(`<span style="color:#1890FF;font-weight:bold">&nbsp;${e.name}</span>`)
                    // 防止影响后续文字颜色
                    addText(`<span style="color:#000;">&nbsp;</span>`)
                }
            }

 效果如下。点击上面的标签,插入内容到富文本中

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值