最近对 Range 和 Selection 比较感兴趣。
基本非 IE 的浏览器都支持 DOM Level2 中的 Range,而 IE 中仅有自己的简单处理方法(Text Rang)。
扩展阅读:
《TextRange Prototype》
《Document Object Model Range》
《Javascript标准DOM Range操作(1)》(节选自《JavaScript 高级程序设计》)
《Javascript标准DOM Range操作(2)》(节选自《JavaScript 高级程序设计》)
《Javascript标准DOM Range操作(3)》(节选自《JavaScript 高级程序设计》)
而 IE 下的 Text Rang 主要用来处理文本,并非 DOM 节点,那如何在 IE 下模拟 DOM Level2 中的 Range 呢?
根据规范的 API,我们需要模拟下述属性和方法:
function zRange() { // Inital states this.startContainer = document; this.startOffset = 0; this.endContainer = document; this.endOffset = 0; this.commonAncestorContainer = document; this.collapsed = true;
// Range constants this.START_TO_START = 0; this.START_TO_END = 1; this.END_TO_END = 2; this.END_TO_START = 3; }
zRange.prototype = { // Public methods setStart : function(node, offset){}, setEnd : function(node, offset){}, setStartBefore : function(node){}, setStartAfter : function(node){}, setEndBefore : function(node){}, setEndAfter : function(node){}, collapse : function(toStart) {}, selectNode : function(node) {}, selectNodeContents : function(node){}, deleteContents : function() {}, extractContents : function(){}, cloneContents : function() {}, surroundContents : function () {}, insertNode : function(node) {}, cloneRange : function() {}, detach : function() {}, compareBoundaryPoints : function (how, sourceRange) {}, constructor : zRange }
出处:怿飞's blog
责任编辑:bluehearts
上一页 下一页 模拟实现Range的insertNode()方法 [2]
◎进入论坛网络编程版块参加讨论
|