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

本文详细介绍了如何在IE和标准DOM环境下利用Selection和Range对象在光标当前位置插入文本或HTML结点。通过获取用户选区,转换为Range对象,清除原有内容,再插入新的文本,并调整光标位置。对于IE,使用pasteHTML方法;对于DOM,通过创建和操作Range对象来完成。最后,文章提到了innerHTML与pasteHTML的区别,以及如何在不同浏览器间进行兼容处理。
摘要由CSDN通过智能技术生成

正确的方法是正确运用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 = 'oRange.text';

oRange.pasteHTML(oHtml);

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值