web版的聊天室对与前端来说真的是一个头疼的问题,特别是输入框显示表情,需要contentEditable属性来显示,但是contentEditable又有光标问题,插入的表情无法在光标下插入,会自动跳到最前面,还有就是输入框打开时,光标总是跳到最前面,下面是两个方法解决表情输入到光标下和自动跳到文本最后面

1、在光标后输入   //下面是vue-cli中的代码

function selectImg (item) {
      let Img = `<img class="text-emoji" name="${item.name}" src="${item.file}" />`  // img是要插入的图片表情
      let obj = this.$refs.emoji   // obj 是可编辑的div
      let range, node
      if (!obj.hasfocus) {
        obj.focus()
      }
      if (window.getSelection && window.getSelection().getRangeAt) {
        range = window.getSelection().getRangeAt(0)
        range.collapse(false)
        node = range.createContextualFragment(Img)
        let c = node.lastChild
        range.insertNode(node)
        if (c) {
          range.setEndAfter(c)
          range.setStartAfter(c)
        }
        let j = window.getSelection()
        j.removeAllRanges()
        j.addRange(range)
      } else if (document.selection && document.selection.createRange) {
        document.selection.createRange().pasteHTML(Img)
      }
    }

2、把光标设置在文本最后

keepLastIndex (obj) {   // obj 为可编辑 的div  移动端的就没做低版本的兼容
  if (window.getSelection) {
    let range = window.getSelection()// 创建range
    range.selectAllChildren(obj)// range 选择obj下所有子内容
    range.collapseToEnd()// 光标移至最后
  }
}

关于可编辑div contentEditable=true 添加表情光标设置问题相关推荐

  1. 富文本编辑器,可编辑div contentEditable=true,光标位置window.getSelection

    在近期项目中,需要在一个实时通信软件中,在发送消息时支持发送加粗的消息,现在总结一下使用心得. 需求: 在发送消息时,点击加粗图标,图标添加选中效果,输入的文字.添加的文字表情.@人员都需要显示为加粗 ...

  2. 开启html元素的编辑模式contenteditable=true

    开启html元素的编辑模式contenteditable="true" 转载于:https://www.cnblogs.com/yangchongxing/p/7642407.ht ...

  3. vue可编辑div_vue2 如何实现div contenteditable=“true”(类似于v-model)的效果

    发现问题 在 vue2 中对表单控件有着良好的双向数据绑定机制,但是对于要特定实现某些功能的输入时,我们就不得不使用到 contenteditable="true" 的 div , ...

  4. 关于可编辑div插入表情图标

    在最近的开发中因为项目需要一个可编辑插入表情的编辑框,起初也是头大煎熬,总是被我熬出来了. 在可编辑框中为难我们的是光标定位和在光标的位置插入指定的内容和表情 下面开始正事 节点内容是这样的我用的是v ...

  5. div可编辑,contenteditable 属性

    1.添加contenteditable属性让文本处于可编辑状态, 实例 <div contenteditable="true">这里可以编辑</div> c ...

  6. 撸VUE弹窗组件 + 可编辑div 组件

    现在我们先只看看已经实现的功能,下次再发布如何从写组件到发布npm,和其中遇到的一些坑 都是实现一些简单的功能,代码量很小,其中还结合网上的一些比较优秀的代码,如果发现自己的一小部分代码也在里面,不要 ...

  7. android仿微信图片编辑器,electron/vue可编辑框contenteditable|仿微信截图

    基于Electron+vue实现div可编辑contenteditable插入表情|electron-vue截图功能 为了避免使用 vue 手动建立起 electron 应用程序.electron-v ...

  8. 在可编辑div中插入文字或图片的问题解决思路

    最近在网上碰到一个人问了我一个问题,在可编辑div中插入文字或者图片.因为web在线编辑器我从来只是用,基本不会去研究源代码.后来正好一个在线聊天web项目中也要用到这个功能,我就特地看看了代码. 基 ...

  9. 使用contenteditable=“true“改造div可编辑文本框

    使用contenteditable="true"改造div可编辑文本框,并去除粘贴复制的格式问题 contenteditable="true" 可编辑 cont ...

最新文章

  1. JS 获取每月有几周(每周五到周四算作一周)
  2. springMVC入门配置及helloworld实例
  3. 最小生成树之Kruskal
  4. Spring中IoC的入门实例[转]
  5. 进行连续心率监测可以诊断哪些疾病?
  6. bean validation校验方法参数_Springboot 使用校验框架validation校验
  7. 用HTML5 Canvas为Web图形创建特效
  8. C语言中指针定义的字符串和数组定义的字符串的区别
  9. fatal error: alsa/asoundlib.h: 没有那个文件或目录
  10. 扇贝有道180927每日一句
  11. 第三章——Lyapunov理论基础
  12. 【8.8gzoj综合】师生树【BFS】
  13. 80亿美元侵权诉讼的随想
  14. 用mysql查找姓王的行为轨迹_mysql查询
  15. 给宝宝补钙的健康新钙念
  16. 自动控制原理7.5---离散系统的稳定性与稳态误差
  17. 【MaixPY 教程】用mixly玩转k210——条形码、二维码、AprilTag识别
  18. 国际足联正式裁决莫德斯特闹剧 此事或还有反转?
  19. jQuery点击图片来回切换功能
  20. 【力扣周赛】第340场周赛

热门文章

  1. 达人评测 i5 12400和i5 12400f区别哪个好 酷睿i512400和i512400F差多少
  2. Android 飞猪日历,移动app中对日期选择器的设计
  3. 计算机主板属于主机构成吗,电脑主板由哪几部分构成?各部分的作用是什么?
  4. MEXGroup:欧元继续保持偏强走势,今日可重点关注各国PMI数据
  5. 空间计算时代来临:苹果Vision Pro震撼上市,探索真实与虚拟的新边界
  6. 从隔离级别和MVCC谈起
  7. C语言编程:猴子吃桃问题
  8. Lucene 索引文件的生成(二十五)之kddkdikdm
  9. ubuntu 登录界面 KDM改回GDM
  10. 为什么建议一个容器中只运行一个进程