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 相关文章推荐
IE图片缓存document.execCommand(&quot;BackgroundImageCache&quot;,false,true)
Mar 01 Javascript
jquery JSON的解析方式示例介绍
Jul 27 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
Oct 11 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
更高效的使用JQuery 这里总结了8个小技巧
Apr 13 Javascript
javascript图片预览和上传(兼容IE)
Mar 15 Javascript
web.js.字符串与正则表达式操作
May 13 Javascript
深入理解vue.js中的v-if和v-show
Jun 22 Javascript
JS获取input[file]的值并显示在页面的实现方法
Mar 09 Javascript
微信网页登录逻辑与实现方法
Apr 29 Javascript
解决一个微信号同时支持多个环境网页授权问题
Aug 07 Javascript
JavaScript实现简单计时器
Jun 22 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/02/15 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
js切换div css注意的细节
2012/12/10 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
jQuery实现淡入淡出二级下拉导航菜单的方法
2015/08/28 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
Javascript实现单例模式
2016/01/24 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
深入理解Vue2.x的虚拟DOM diff原理
2017/09/27 Javascript
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
使用vue.js在页面内组件监听scroll事件的方法
2018/09/11 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
如何解决js函数防抖、节流出现的问题
2019/06/17 Javascript
Python argv用法详解
2016/01/08 Python
Python 专题四 文件基础知识
2017/03/20 Python
解决python os.mkdir创建目录失败的问题
2018/10/16 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
2018/12/19 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
python列表返回重复数据的下标
2020/02/10 Python
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
上海世博会口号
2014/06/19 职场文书
机械工程及自动化专业求职信
2014/09/03 职场文书
普通党员四风问题对照检查材料
2014/09/27 职场文书
公司2014年度工作总结
2014/12/10 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
使用CSS实现一个搜索引擎的原理解析
2021/09/25 HTML / CSS
python百行代码实现汉服圈图片爬取
2021/11/23 Python
实例详解Python的进程,线程和协程
2022/03/13 Python