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 相关文章推荐
简单通用的JS滑动门代码
Dec 19 Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
Nov 19 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
May 19 Javascript
使用AngularJS制作一个简单的RSS阅读器的教程
Jun 18 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
AngularJs页面筛选标签小功能
Aug 01 Javascript
DOM中事件处理概览与原理的全面解析
Aug 16 Javascript
jQuery实现的简单拖拽功能示例
Sep 13 Javascript
JS实现点击Radio动态更新table数据
Jul 18 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
Apr 08 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&amp;MYSQL留言板源码
2020/07/19 PHP
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
javascript使用activex控件的代码
2011/01/27 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
用Python实现一个简单的线程池
2015/04/07 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
Python selenium抓取微博内容的示例代码
2018/05/17 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
对Python中创建进程的两种方式以及进程池详解
2019/01/14 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
Python unittest框架操作实例解析
2020/04/13 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
安全目标管理责任书
2014/07/25 职场文书
团队拓展活动总结
2014/08/27 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
史上最牛的辞职信
2015/02/28 职场文书
中国文明网2015年“向国旗敬礼”活动网上签名寄语
2015/09/24 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android