JavaScript中在光标处插入添加文本标签节点的详细方法


Posted in Javascript onMarch 22, 2017

正确的方法是正确运用Selection对象和Range对象,实现在光标当前位置插入文本或结点。但是这两个对象在IE和标准的DOM方式的运用方法是不同的。

思路:首先获得用户的选区(光标当前位置可理解成起始和终止位置一样的选区)。然后,从Selection对象转成Range对象。目的是利用Range对象的方法插内容进去。最后,插入动作结束后将光标移到插入内容的后面。

var sel = win.document.selection; //IE 
var sel = win.getSelection(); //DOM 
var range = sel.createRange(); // IE下 
var range = sel.getRangeAt(0); // DOM下 
if(range.startContainer){ // DOM下 
 sel.removeAllRanges(); // 删除Selection中的所有Range 
 range.deleteContents(); // 清除Range中的内容 
 // 获得Range中的第一个html结点 
 var container = range.startContainer; 
 // 获得Range起点的位移 
 var pos = range.startOffset; 
 // 建一个空Range 
 range = document.createRange(); 
 // 插入内容 
 var cons = win.document.createTextNode(",:),"); 
 if(container.nodeType == 3){// 如是一个TextNode 
 container.insertData(pos, cons.nodeValue); 
 // 改变光标位置 
 range.setEnd(container, pos + cons.nodeValue.length); 
 range.setStart(container, pos + cons.nodeValue.length); 
 }else{// 如果是一个HTML Node 
 var afternode = container.childNodes[pos]; 
 container.insertBefore(cons, afternode); 
 range.setEnd(cons, cons.nodeValue.length); 
 range.setStart(cons, cons.nodeValue.length); 
 } 
 sel.addRange(range); 
}else{// IE下 
 var cnode = range.parentElement(); 
 while(cnode.tagName.toLowerCase() != “body”){ 
 cnodecnode = cnode.parentNode; 
 } 
 if(cnode.id && cnode.id==”rich_txt_editor”){ 
 range.pasteHTML(",:),"); 
 } 
} 
win.focus();

innerHTML 和 pasteHTML 区别

innerHTML 是一个属性,可以取得或者设定该元素内的 HTML 内容,可以是任意能包含 HTML 子节点的元素都使用它

pasteHTML()是一个方法,在指定的文字区域内替换该区域内的文本或者HTML,该方法必须应用于一个 createTextRange() 或者 document.selection.createRange() 创建的区域上

var oRange = document.selection.createRange(); 
 if(oRange.text!=''){ 
 var oHtml = '<a href="#" rel="external nofollow" target=_blank>oRange.text</a>'; 
 oRange.pasteHTML(oHtml); 
 }

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
Mar 12 Javascript
setTimeout()递归调用不加引号出错的解决方法
Sep 05 Javascript
关于js里的this关键字的理解
Aug 17 Javascript
基于jQuery全屏焦点图左右切换插件responsiveslides
Sep 07 Javascript
javascript针对cookie的基本操作实例详解
Nov 30 Javascript
AngularJS HTML DOM详解及示例代码
Aug 17 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
Sep 13 Javascript
深入学习 JavaScript中的函数调用
Mar 23 Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
功能完善的小程序日历组件的实现
Mar 31 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 Javascript
基于jQuery拖拽事件的封装
Nov 29 jQuery
jQuery轻松实现无缝轮播效果
Mar 22 #jQuery
JavaScript登录记住密码操作(超简单代码)
Mar 22 #Javascript
原生JS京东轮播图代码
Mar 22 #Javascript
10道典型的JavaScript面试题
Mar 22 #Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 #jQuery
js弹出窗口简单实现代码
Mar 22 #Javascript
js实现自动图片轮播代码
Mar 22 #Javascript
You might like
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP日期处理函数 整型日期格式
2011/01/12 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
封装好的省市地区联动控件附下载
2007/08/13 Javascript
用js遍历 table的脚本
2008/07/23 Javascript
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
分享12个非常实用的JavaScript小技巧
2016/05/11 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
2019/09/28 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
使用python编写监听端
2018/04/12 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
django的403/404/500错误自定义页面的配置方式
2020/05/21 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
2020/11/05 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
英国奢侈品概念店:Base Blu
2019/05/16 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
员工2014年度工作总结
2014/12/09 职场文书
陪护人员误工证明
2015/06/24 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
python如何做代码性能分析
2021/04/26 Python
html粘性页脚的具体使用
2022/01/18 HTML / CSS
vue使用wavesurfer.js解决音频可视化播放问题
2022/04/04 Vue.js