一般我们做文本对话框,都考虑使用textarea,其实,用div也可以实现,用div的好处就是可以往里插入图片、表情等,不必都显示为字符。

但是在插入表情图片或插入图片时就面临一个问题,图片怎么才能放到我输入文本的中间位置,而不是每次都追加到最后面,百度搜索了很多资料,自己试过,包装好了两种方法,一种是针对div的,一种针对textarea,当然,textarea没法显示图片,只适用于插入表情后将代表表情的字符串插入到文本中间。

代码如下:

// 在光标位置插入内容(仅适用于textarea文本输入框)
function insertValueAtCursor(myField, insertContent) {if (myField != document.activeElement) {myField.value = myField.value + insertContent;return;}//IE supportif (document.selection) {myField.focus();var sel = document.selection.createRange();sel.text = insertContent;sel.select();}//MOZILLA/NETSCAPE supportelse if (typeof myField.selectionStart === 'number' || typeof myField.selectionEnd == 'number') {var startPos = myField.selectionStart;var endPos = myField.selectionEnd;console.log("startPos:" + startPos)// save scrollTop before insertvar restoreTop = myField.scrollTop;myField.value = myField.value.substring(0, startPos) + insertContent + myField.value.substring(endPos, myField.value.length);if (restoreTop > 0) {// restore previous scrollTopmyField.scrollTop = restoreTop;}myField.focus();myField.selectionStart = startPos + insertContent.length;myField.selectionEnd = startPos + insertContent.length;} else {console.log('OK')myField.value += insertContent;myField.focus();}
}
// 在光标位置插入html代码,如果dom没有获取到焦点则追加到最后
function insertAtCursor(dom, html) {if (dom != document.activeElement) { // 如果dom没有获取到焦点,追加dom.innerHTML = dom.innerHTML + html;return;}var sel, range;if (window.getSelection) {// IE9 或 非IE浏览器sel = window.getSelection();if (sel.getRangeAt && sel.rangeCount) {range = sel.getRangeAt(0);range.deleteContents();// Range.createContextualFragment() would be useful here but is// non-standard and not supported in all browsers (IE9, for one)var el = document.createElement("div");el.innerHTML = html;var frag = document.createDocumentFragment(),node, lastNode;while ((node = el.firstChild)) {lastNode = frag.appendChild(node);}range.insertNode(frag);// Preserve the selectionif (lastNode) {range = range.cloneRange();range.setStartAfter(lastNode);range.collapse(true);sel.removeAllRanges();sel.addRange(range);}}} else if (document.selection && document.selection.type != "Control") {// IE < 9document.selection.createRange().pasteHTML(html);}
}

附件中我上传整个demo源码。

QQ聊天对话框(Js实现,支持表情插入文本中间)相关推荐

  1. QQ聊天粘贴的文字变成表情的解决方法

    QQ聊天粘贴的文字变成表情的解决方法 解决方法: 在从事java开发过程中,有时会使用qq给同事发一下带有特殊符号的内容,例如代码啊,文件路径啊等等.发现复制并粘贴到qq聊天窗口时,有的字符竟然变成了 ...

  2. app打开QQ聊天对话框

    现在很多app内涉及到购买商品时,客户和商家在线聊天的(QQ聊天) - (IBAction)goToQQView:(id)sender { // 空白的webview UIWebView * webV ...

  3. QQ聊天对话框内 聊天者昵称,发送者昵称 的字体颜色怎么设置

    最近在模仿腾讯QQ聊天框 通过C#,工具我用的是 vs2005 现在 我都要抓狂了

  4. 如何通过网页的超连接,显示qq聊天对话框

    红色的是我的qq号码.你可以换成你自己的qq号码 <a href="tencent://Message/?Uin= 570917820&websiteName=q-zone.q ...

  5. 浏览器 模仿QQ聊天 对话框

    原因:项目有个功能是咨询,其中咨询详情如果使用以前的进行条目列出就显得效果比较差.用户体验不怎么好,所以希望进行改造.最终效果要想QQ群对话一样,这样用户体验效果要好的多. 好了不多说废话,直接列出代 ...

  6. qt小项目 代码实现简易的QQ聊天 对话框的界面实现

    效果显示 代码实现 myWindow.h #ifndef WINDOW_H #define WINDOW_H#include <QWidget> #include <QVBoxLay ...

  7. QQ聊天框变成方框口口口口的解决办法

    QQ聊天框变成方框口口口口的解决办法 安装了QQ拼音输入法6.0之后,发现 QQ聊天对话框好友名称变成框口口口口口,网上没有找到办法,卸载轻聊版,安装完整版9.03之后,再次启动就好了.

  8. HTML CSS JS实现网页聊天窗口,js实现聊天对话框

    本文实例为大家分享了js实现聊天对话框的具体代码,供大家参考,具体内容如下 .box{ width:300px; height:400px; border:1px solid blue; margin ...

  9. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

最新文章

  1. 鸿蒙系统的可能性,华为P40将搭载鸿蒙操作系统 可能性大么
  2. MySQL 8.0 首个自适应参数横空出世
  3. golang小程序试验(二)
  4. 国内淘宝镜像 cnpm转npm
  5. python动态语言双刃性_动态语言的灵活性是把双刃剑:以 Python 语言为例
  6. C/C++ OpenCV方框滤波
  7. 图片作为背景并且是链接的写法(背景图片加链接)
  8. java日期格式正则表达式_Java-日期 正则表达式
  9. 懒加载和预加载的区别_类的动态创建(ro,rw)amp; 懒加载类和非懒加载类底层加载的区别 amp; 类和分类的搭配分析...
  10. 在IntelliJ IDEA中使用 JAVAFX 过程记录
  11. matlab t分布 反函数,Excel 应用TINV函数计算学生的t分布的反函数
  12. 岁月温柔-23 妈妈转到省医院第3天 突然icu有床位了
  13. android q mix3,小米MIX3成首款适配Android Q的5G手机
  14. 五大浏览器js 判断IE、Firefox、Safari、Chrome、Opera
  15. RDD、DataFrame、DataSet原理解析
  16. 声学——声源定位阅读笔记
  17. GLES2.0中文API-glCopyTexImage2D
  18. 前沿 | 中国中小银行都是如何展开数字化转型的?
  19. 特斯拉电动汽车售价将平均上调3% 不包括3.5万美元版Model 3
  20. 软件学院研究方向,对研究方向迷茫的同学一定要看(据说是一位北大软院前辈写的)

热门文章

  1. [Linux Audio Driver] SM6350平台音频bring up ( 一 )
  2. Linux下wait_for_completion引起的开机定屏
  3. sql Server 创建临时表 嵌套循环 添加数据
  4. java.lang.IllegalStateException: 由于没有提供multi-part配置,无法处理parts
  5. 武林外传手游怎么在电脑上玩,武林外传安卓模拟器电脑版教程
  6. 利用Python爬虫爬取淘宝商品做数据挖掘分析实战篇,超详细教程
  7. OA系统与MES系统的异同点
  8. ue4 GetPhysicsLinearVelocity 为空
  9. window10快速关机小技巧(超级简单)
  10. 【Linux39-9】k8s存储之卷(volumes)、挂载不同类型的卷(emptyDir、hostpath、nfs)