以下函数将在所有主流浏览器的选择结尾处插入DOM节点(元素或文本节点)(请注意,Firefox现在默认允许多个选择;以下仅使用第一个选择):

function insertNodeAfterSelection(node) {

var sel, range, html;

if (window.getSelection) {

sel = window.getSelection();

if (sel.getRangeAt && sel.rangeCount) {

range = sel.getRangeAt(0);

range.collapse(false);

range.insertNode(node);

}

} else if (document.selection && document.selection.createRange) {

range = document.selection.createRange();

range.collapse(false);

html = (node.nodeType == 3) ? node.data : node.outerHTML;

range.pasteHTML(html);

}

}

如果您想要插入HTML字符串:

function insertHtmlAfterSelection(html) {

var sel, range, node;

if (window.getSelection) {

sel = window.getSelection();

if (sel.getRangeAt && sel.rangeCount) {

range = window.getSelection().getRangeAt(0);

range.collapse(false);

// 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);

}

} else if (document.selection && document.selection.createRange) {

range = document.selection.createRange();

range.collapse(false);

range.pasteHTML(html);

}

}

2012年1月18日更新

最后,这是一个插入HTML并保留选择的版本(即扩展选择以包括最初选择的内容加上插入的内容)。

现场演示:http://jsfiddle.net/timdown/JPb75/1/

码:

function insertHtmlAfterSelection(html) {

var sel, range, expandedSelRange, node;

if (window.getSelection) {

sel = window.getSelection();

if (sel.getRangeAt && sel.rangeCount) {

range = window.getSelection().getRangeAt(0);

expandedSelRange = range.cloneRange();

range.collapse(false);

// 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 selection

if (lastNode) {

expandedSelRange.setEndAfter(lastNode);

sel.removeAllRanges();

sel.addRange(expandedSelRange);

}

}

} else if (document.selection && document.selection.createRange) {

range = document.selection.createRange();

expandedSelRange = range.duplicate();

range.collapse(false);

range.pasteHTML(html);

expandedSelRange.setEndPoint("EndToEnd", range);

expandedSelRange.select();

}

}

用vs编写html后sel,选择后插入HTML相关推荐

  1. TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择

    [AI创新者]TensorFlow贡献者黄文坚:解读对比13个深度学习框架后的选择 AI创新者 Google 人工智能 深度学习 TensorFlow 阅读5774  [AI创新者]是CSDN人工智能 ...

  2. ubuntu16.04在英文状态下安装中文语言包的过程(法一:图形界面的方式) 以及 安装中文语言包后无法选择汉语问题的解决

    ubuntu16.04在英文状态下安装中文语言包的过程(法一:图形界面的方式) 以及 安装中文语言包后无法选择汉语问题的解决 参考文章: (1)ubuntu16.04在英文状态下安装中文语言包的过程( ...

  3. source insight 注释乱码?(【File】 > 【Reload As Encoding…】 > 【Chinese Simplified (GB18030)】 > 选择后,点击load)

    文章目录 没有用,只是改变了显示,复制出去还是乱码 能解决 没有用,只是改变了显示,复制出去还是乱码 如图,注释乱码 打开: options->preferences->Syntax Fo ...

  4. winform combobox选择后_后驱车真的比前驱车更加高级吗?涨知识了!

    一般来说,发动机放置位置可以分为前置后驱.前置前驱.后置后驱以及中置后驱.驱动方式的不同,导致行驶的结果也必然存在差异.车主们对后驱车和前驱车哪种更高级也有争辩,很多人反映后驱车更加高级,事实是否如此 ...

  5. 当公司辞掉85后测试员选择95后测试员后...

    小H被裁员了. 作为一名85后的单身未婚女测试员,原本正在展望升职中层领导职位的她,在公司新吸收了不少95后的新鲜血液后,一言不合竟然就被自己所在的互联网大厂要求"协议离职",一时 ...

  6. ElementUI下拉框选择后不显示值

    文章目录 方法一 方法二 问题:vue(ElementUI)下拉框选择后赋值了,但是框上不显示 <!--下拉框--> <el-form-item label="用户角色&q ...

  7. form表单file,select选择后自动提交

    form表单file.select选择后自动提交 1.input type="file"控件自动提交,常用于修改用户图片等处.(注:post,get方式都行) <?php i ...

  8. 新疆苹果服务器不稳定,乌鲁木齐市民反映:苹果系统升级后自动选择新疆时区...

    原标题:乌鲁木齐市民反映:苹果系统升级后自动选择新疆时区 www.ts.cn 天山网 2014年09月26日 11:00:14 新疆网讯(记者盖煜报道)"大早上就迟到,这全因为ios8.&q ...

  9. uniapp 打包app后,选择文件上传时,编辑上传文件

    uniapp打包app后,业务需求有个一个需要上传文件的需求,因此需要查找手机的本地文件,但是uni.chooseFile(OBJECT)这个api无法作用在app上,因此在插件市场找到的了别人写好的 ...

最新文章

  1. Java注解和xml_Spring注解配置和xml配置优缺点比较
  2. 面相对象的topSort和递推【ural1022/ural1017】
  3. Zoom市值达586亿美元,放中国科技巨头能排第6!净利润暴涨135倍,每天3亿人开会...
  4. 一次简单的Java服务性能优化,实现压测 QPS 翻倍
  5. 现在就是.Net最好的时代!我赞成,谁反对?
  6. 怎么利用计算机计算潮流计算,电力系统潮流计算的目的是什么
  7. 【Python】Python库之数据分析
  8. 数据科学近3年都应用在哪些领域?
  9. [转载] 七龙珠第一部——第061话 塔上的卡林神
  10. c语言数组指针定义方法,C语言数组指针定义方法
  11. 电气AutoCAD基础教学(一)——入门技巧
  12. RocketMQ Message相关命令【实战笔记】
  13. 幼儿抽象逻辑思维举例_孩子逻辑思维能力有多重要?巧用生活小游戏,培养好了娃受益终身...
  14. 第一次QQ群视频教育有感
  15. 解决go数据表查询结构体对应字段null问题(sqlx converting NULL to string is unsupported)
  16. android 支付sdk流程,支付SDK
  17. JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式
  18. 新闻资讯类网站的PC端前台模板分享
  19. 虚拟机VMware使用U盘装系统
  20. 转载:“技术支持工程师”薪资行情

热门文章

  1. 什么是UDS诊断协议
  2. chrome播放音频报错 play failed because....
  3. Discuz论坛 创始人/超级管理员密码忘记解决办法!
  4. vue.js以及vue_devtools的网盘
  5. DVD/CD-ROM驱动器感叹号解决方法
  6. EXCEL中设置固定行列
  7. 2022最新英皇CMS影视系统源码+多种模板/自带采集/支持AP
  8. 大学生H5动画设计成品作业 —— 城市环保网
  9. forum php 无法下载应用程序,苹果Iphone或ipad无法下载应用程序的六种解决办法
  10. 题解 P2196 【挖地雷】