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 相关文章推荐
脚本收藏iframe
Jul 21 Javascript
js获取图片大小的函数代码
Sep 20 Javascript
小心!AngularJS结合RequireJS做文件合并压缩的那些坑
Jan 09 Javascript
bootstrap table操作技巧分享
Feb 15 Javascript
JS鼠标滚动分页效果示例
Jul 05 Javascript
js编写简单的计时器功能
Jul 15 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
vue实现菜单切换功能
May 08 Javascript
基于vue实现一个禅道主页拖拽效果
May 27 Javascript
JS实现网页烟花动画效果
Mar 10 Javascript
Vue ​v-model相关知识总结
Jan 28 Vue.js
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
Feb 15 Javascript
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
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
JavaScript类和继承 prototype属性
2010/09/03 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
2014/07/31 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
详解React中setState回调函数
2018/06/14 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
vue+express+jwt持久化登录的方法
2019/06/14 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python实现五子棋小游戏
2020/03/25 Python
基于python实现百度翻译功能
2019/05/09 Python
Pandas之排序函数sort_values()的实现
2019/07/09 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Python安装与卸载流程详细步骤(图解)
2020/02/20 Python
python如何调用字典的key
2020/05/25 Python
Python暴力破解Mysql数据的示例
2020/11/09 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
浅谈HTML5新增及移除的元素
2016/06/27 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
工作说明书格式
2014/07/29 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
人代会简报
2015/07/21 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
Flask response响应的具体使用
2021/07/15 Python