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 相关文章推荐
jquery下异步提交表单 异步跨域提交表单
Nov 17 Javascript
js实现图片无缝滚动特效
Mar 19 Javascript
webpack学习教程之publicPath路径问题详解
Jun 17 Javascript
ES6深入理解之“let”能替代”var“吗?
Jun 28 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
JavaScript截屏功能的实现代码
Jul 28 Javascript
JS运动特效之同时运动实现方法分析
Jan 24 Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
Jan 28 Javascript
基于JavaScript实现随机点名器
Feb 25 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
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
javascript实现tab切换的两个实例
2015/11/05 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
ES6正则表达式扩展笔记
2017/07/25 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
Vue使用mixin分发组件的可复用功能
2019/09/01 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
vue-cli3访问public文件夹静态资源报错的解决方式
2020/09/02 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
pandas通过loc生成新的列方法
2018/11/28 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
Python sklearn中的.fit与.predict的用法说明
2020/06/28 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
入股协议书
2014/04/14 职场文书
企业消防安全责任书
2014/07/23 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
公司车辆管理制度
2015/08/04 职场文书
超市店长竞聘书
2015/09/15 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL
如何利用React实现图片识别App
2022/02/18 Javascript