JavaScript 中在光标处插入添加文本标签节点 详细方法
正确的方法是正确运用Selection对象和Range对象,实现在光标当前位置插入文本或结点。但是这两个对象在IE和标准的DOM方式的运用方法是不同的。
思路:首先获得用户的选区(光标当前位置可理解成起始和终止位置一样的选区)。然后,从Selection对象转成Range对象。目的是利用Range对象的方法插内容进去。最后,插入动作结束后将光标移到插入内容的后面。
01
var sel = win.document.selection; //IE
02
var sel = win.getSelection(); //DOM
03
04
var range = sel.createRange(); // IE下
05
var range = sel.getRangeAt(0); // DOM下
06
07
if(range.startContainer){ // DOM下
08
sel.removeAllRanges(); // 删除Selection中的所有Range
09
range.deleteContents(); // 清除Range中的内容
10
// 获得Range中的第一个html结点
11
var container = range.startContainer;
12
// 获得Range起点的位移
13
var pos = range.startOffset;
14
// 建一个空Range
15
range = document.createRange();
16
// 插入内容
17
var cons = win.document.createTextNode(",:),");
18
19
if(container.nodeType == 3){// 如是一个TextNode
20
container.insertData(pos, cons.nodeValue);
21
// 改变光标位置
22
range.setEnd(container, pos + cons.nodeValue.length);
23
range.setStart(container, pos + cons.nodeValue.length);
24
}else{// 如果是一个HTML Node
25
var afternode = container.childNodes[pos];
26
container.insertBefore(cons, afternode);
27
28
range.setEnd(cons, cons.nodeValue.length);
29
range.setStart(cons, cons.nodeValue.length);
30
}
31
sel.addRange(range);
32
}else{// IE下
33
var cnode = range.parentElement();
34
while(cnode.tagName.toLowerCase() != “body”){
35
cnode = cnode.parentNode;
36
}
37
if(cnode.id && cnode.id==”rich_txt_editor”){
38
range.pasteHTML(",:),");
39
}
40
}
41
win.focus();
innerHTML 和 pasteHTML 区别
相关新闻>>
- Javascript 兼容 IE6、IE7、FF 的“加入收藏”“设为首页”
- 好好学一遍JavaScript 笔记(一)——基础中的基础
- 好好学一遍JavaScript 笔记(二)——encode、数组、对象创建
- 好好学一遍JavaScript 笔记(三)——StringBuffer、prototype
- 好好学一遍javaScript 笔记(四)——Attribute、HTML元素、文档碎
- 好好学一遍JavaScript 笔记(五)——正则表达式基础
- 好好学一遍JavaScript 笔记(六)——正则表达式基础二
- 好好学一遍JavaScript 笔记(七)——RegExp对象与常用正则
- 好好学一遍JavaScript 笔记(八)——冒泡型事件、捕获型事件
- JavaScript详解
- 发表评论
-
- 最新评论 更多>>