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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
学习JS面向对象成果 借国庆发布个最新作品与大家交流
Oct 03 Javascript
Jquery AutoComplete自动完成 的使用方法实例
Mar 19 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
May 31 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
Nov 02 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
Dec 26 Javascript
关于react-router的几种配置方式详解
Jul 24 Javascript
在Vue项目中使用d3.js的实例代码
May 01 Javascript
微信小程序如何获取用户收货地址
Nov 27 Javascript
JS实现时间校验的代码
May 25 Javascript
Node.JS如何实现JWT原理
Sep 18 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查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
JS的IE和Firefox兼容性集锦
2006/12/11 Javascript
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript在IE和Firefox(火狐)的不兼容问题解决方法小结
2010/04/13 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
有效提高JavaScript执行效率的几点知识
2015/01/31 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
详解如何较好的使用js
2016/12/16 Javascript
jQuery模拟淘宝购物车功能
2017/02/27 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
关于ES6箭头函数中的this问题
2018/02/27 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
vue-cli和v-charts实现可视化图表过程解析
2019/10/08 Javascript
[01:34]DAC2018主赛事第四日五佳镜头 Gh巨牙海民助Miracle-死里逃生
2018/04/07 DOTA
python 判断一个进程是否存在
2009/04/09 Python
Python数组遍历的简单实现方法小结
2016/04/27 Python
python requests 使用快速入门
2017/08/31 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
用django设置session过期时间的方法解析
2019/08/05 Python
在python Numpy中求向量和矩阵的范数实例
2019/08/26 Python
python 实现list或string按指定分段
2019/12/25 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
J2EE是技术还是平台还是框架
2016/08/14 面试题
浅谈react路由传参的几种方式
2021/03/23 Javascript
高中体育教学反思
2014/01/29 职场文书
大型车展策划方案
2014/02/01 职场文书
软件毕业生个人鉴定
2014/03/03 职场文书
诚实守信演讲稿
2014/09/01 职场文书