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中json对象和string对象之间相互转化
Dec 26 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
Jun 05 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
Aug 15 Javascript
基于Bootstrap漂亮简洁的CSS3价格表(附源码下载)
Feb 28 Javascript
vue实现页面加载动画效果
Sep 19 Javascript
vue.js中父组件调用子组件的内部方法示例
Oct 22 Javascript
微信小程序上传图片实例
May 28 Javascript
基于vue实现可搜索下拉框定制组件
Mar 26 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
Vux+Axios拦截器增加loading的问题及实现方法
Nov 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中如何判断AJAX提交的数据
2012/02/05 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
PHP基础学习之流程控制的实现分析
2013/04/28 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
php制作简单模版引擎
2016/04/07 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
php无限级分类实现方法分析
2016/10/19 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
2019/09/04 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
详解nodejs 文本操作模块-fs模块(一)
2016/12/22 NodeJs
微信小程序 动态的设置图片的高度和宽度详解及实例代码
2017/02/24 Javascript
vue2 中如何实现动态表单增删改查实例
2017/06/09 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
Vue.js用法详解
2017/11/13 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
HTML5 Canvas 实现K线图的示例代码
2019/12/23 HTML / CSS
海淘母婴商城:国际妈咪
2016/07/23 全球购物
小学教师的个人自我鉴定
2013/10/26 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android