/* code ref http://www.cnblogs.com/rubylouvre/archive/2009/10/14/1583523.html IE有contains方法。如果A元素包含B元素,则返回true,否则false。唯一不支持这个方法的是firefox。 不过火狐支持compareDocumentPosition() 方法,这是W3C制定的方法,标准浏览器都支持。 它的使用形式与contains差不多,但返回的不是一个布尔值,而是一个很奇怪的数值,它是通过如下方式累加计算出来的: 二进制 数值 含义 000000 0 元素一致 000001 1 节点在不同的文档(或者一个在文档之外) 000010 2 节点 B 在节点 A 之前 000100 4 节点 A 在节点 B 之前 001000 8 节点 B 包含节点 A 010000 16 节点 A 包含节点 B 100000 32 浏览器的私有使用 A.compareDocumentPosition(B);//B与A不相连,B在A的后面,B被A包含 4+16 = 20 B.compareDocumentPosition(A);//A与B不相连,A在B的前面,A包含B 2+8 = 10 */ //PPK给出如下解决方法。 if (window.Node && Node.prototype && !Node.prototype.contains) { Node.prototype.contains = function (arg) { return !!(this.compareDocumentPosition(arg) & 16);//位运算 小于16结果为0 } } //2011.9.24 by 司徒正美 var contains = function(root, el) { if (root.compareDocumentPosition) return root === el || !!(root.compareDocumentPosition(el) & 16); if (root.contains && el.nodeType === 1) { return root.contains(el) && root !== el; } //两种原生方法都不支持的话 -_-||| 递归吧 while ((el = el.parentNode)) if (el === root) return true; return false; }
2011年12月22日星期四
Node.contains
订阅:
博文评论 (Atom)
没有评论:
发表评论