vue项目中在可编辑div光标位置插入内容的实现代码


Posted in Javascript onJanuary 07, 2020

vue项目中在可编辑div光标位置插入内容

html:

<div class="mouse-move fl f12 h22 lh22 mg-r5 sms-item"
   @dragstart="dragStart($event, item.labelName)"
   draggable='true'
 v-for="(item, index) in modelCommonList"
   :key="index"
   @click="dropRelease($event, item.labelName)">
   {{item.labelName}}
 </div>
<div contenteditable="true"
   @drop="dropRelease($event)"
   @dragover="allowDrop($event)"
   ref="smsContent"
   class="border-r4 f12 h100 pd-tb10 pd-lr10 overflow-scroll-y editable-div"
   id="smsContent">
</div>

methods:

insertHtmlAtCaret(html) {
    let sel, range;
    if (window.getSelection) {
      // IE9 and non-IE
      sel = window.getSelection();
      if (sel.getRangeAt && sel.rangeCount) {
        range = sel.getRangeAt(0);
        range.deleteContents();
        let el = document.createElement("div");
  el.appendChild(html)
        var frag = document.createDocumentFragment(), node, lastNode;
        while ((node = el.firstChild)) {
          lastNode = frag.appendChild(node);
        }
        range.insertNode(frag);
        if (lastNode) {
          range = range.cloneRange();
          range.setStartAfter(lastNode);
          range.collapse(true);
          sel.removeAllRanges();
          sel.addRange(range);
        }
      }
    } else if (document.selection && document.selection.type != "Control") {
      // IE < 9
      document.selection.createRange().pasteHTML(html);
    }
  },
 //开始拖动可选字段
  dragStart(event, name) {
    event = event || window.event;
    this.dragging = name; //str
    event.dataTransfer.setData(" ", " "); //for firefox
  },
  //阻止默认事件
  allowDrop(event) {
    let e = event || window.event;
    if (e && e.preventDefault) {
      e.preventDefault();
    } else {
      window.event.returnValue = false;
    }
  },
  //拖动到指定位置并释放
  dropRelease(event, nodeValueName) {
    event = event || window.event;
    event.preventDefault();
    let textNode = document.createElement('input');
    textNode.className = 'mg-lr5 enabledTag';
    textNode.type = 'button';
    textNode.value = this.dragging || nodeValueName;
    this.insertHtmlAtCaret(textNode);
    this.dragging = '';
  },

总结

以上所述是小编给大家介绍的vue项目中在可编辑div光标位置插入内容的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
javascript 一个函数对同一元素的多个事件响应
Jul 25 Javascript
JavaScript中读取和保存文件实例
May 08 Javascript
javascript 中that的含义示例介绍
May 14 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
javascript白色简洁计算器
May 04 Javascript
详解vue-Resource(与后端数据交互)
Jan 16 Javascript
three.js快速入门【推荐】
Jan 21 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
微信小程序--onShareAppMessage分享参数用处(页面分享)
Apr 18 Javascript
基于EasyUI的基础之上实现树形功能菜单
Jun 28 Javascript
JavaScript+H5实现微信摇一摇功能
May 23 Javascript
electron+vue实现div contenteditable截图功能
Jan 07 #Javascript
解决vue elementUI中table里数字、字母、中文混合排序问题
Jan 07 #Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 #Javascript
微信小程序服务器日期格式化问题
Jan 07 #Javascript
webpack 最佳配置指北(推荐)
Jan 07 #Javascript
微信小程序接入腾讯云验证码的方法步骤
Jan 07 #Javascript
vue实现数据控制视图的原理解析
Jan 07 #Javascript
You might like
PHP 八种基本的数据类型小结
2011/06/01 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
use jscript List Installed Software
2007/06/11 Javascript
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Javascript base64编码实现代码
2011/12/02 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
深入浅析JavaScript中对事件的三种监听方式
2015/09/29 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
JS实现从对象获取对象中单个键值的方法示例
2019/06/05 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
2019/10/31 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
使用Python进行二进制文件读写的简单方法(推荐)
2016/09/12 Python
对python中数据集划分函数StratifiedShuffleSplit的使用详解
2018/12/11 Python
Python图像处理之颜色的定义与使用分析
2019/01/03 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
Mio Skincare美国官网:身体紧致及孕期身体护理
2017/03/05 全球购物
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
一些PHP的面试题
2015/05/06 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
教师实习自我鉴定
2013/12/13 职场文书
物理专业大学生职业生涯规划书
2014/02/07 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
2014幼儿园家长工作总结
2014/11/10 职场文书
2015暑假假期总结
2015/07/13 职场文书
三严三实·严以律己心得体会
2016/01/13 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书