input输入框在光标处, 插入文本段

在项目中会遇到这样的情况,用户可以在textarea中输入,也可以选择既有的可供选择的 段落,现需求是用户把光标放在哪,用户选择后的 段落就 插进 该处位置。

实现方式主要是依靠俩点:
一、利用
doxument.selection (这是IE的)
docuemnt.getElementById(xxxx).selsectionStart (这是谷歌等的)
这俩个属性 来找到光标的位置

二、就是利用 字符串的substring 的方式 切割 再拼接;

**

以下是源代码

**

在vue项目中的代码

         const areaField = this.$refs.voicearea; // 拿到目标标签;
        
          // IE浏览器
          if (document.selection) {
            areaField.focus();
            const sel = document.selection.createRange();
            sel.text = item.text;
          } // 谷歌 Firefox 等
           else if (areaField.selectionStart || areaField.selectionStart === '0') {
            const startPos = areaField.selectionStart;
            const endPos = areaField.selectionEnd;
            const restoreTop = areaField.scrollTop;  // 获取滚动条高度
           //  this.waitingTextArea 是v-model的值
           // item.text 是 选择的要插入的值
            this.waitingTextArea = this.waitingTextArea.substring(0, startPos) + item.text
              + this.waitingTextArea.substring(endPos, this.waitingTextArea.length);
            if (restoreTop > 0) {
              areaField.scrollTop = restoreTop;
            }
            areaField.focus();
            areaField.selectionStart = startPos + item.text.length;
            areaField.selectionEnd = startPos + item.text.length;
          } else {
            this.waitingTextArea += item.text;
            areaField.focus();
          }

原生写法




    
    无标题文档



 

你可能感兴趣的:(h5)