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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
jQuery实现文本框邮箱输入自动补全效果
Nov 17 Javascript
理解Javascript文件动态加载
Jan 29 Javascript
学习使用jquery iScroll.js移动端滚动条插件
Mar 24 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
May 30 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
Mar 25 Javascript
关闭Vue计算属性自带的缓存功能方法
Mar 02 Javascript
vue 动态创建组件的两种方法
Dec 31 Vue.js
JS获取一个字符串中指定字符串第n次出现的位置
Feb 10 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如何计算两坐标点之间的距离
2018/12/29 PHP
thinkphp5框架扩展redis类方法示例
2019/05/06 PHP
PHP常用函数之格式化时间操作示例
2019/10/21 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
js设置function参数默认值(适合没有传参情况)
2014/02/24 Javascript
javascript设计模式之中介者模式Mediator
2014/12/30 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
javascript 判断当前浏览器版本并判断ie版本
2017/02/17 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
JavaScript数组去重算法实例小结
2018/05/07 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
vue响应式系统之observe、watcher、dep的源码解析
2019/04/09 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
vue点击按钮动态创建与删除组件功能
2019/12/29 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
2019/04/05 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Python集中化管理平台Ansible介绍与YAML简介
2019/06/12 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
在职研究生自我鉴定
2013/10/16 职场文书
经贸日语专业个人求职信范文
2013/12/28 职场文书
生日寿宴答谢词
2014/01/19 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书