javascript contains方法

IE有许多好用的方法,后来都被其他浏览器抄袭了,比如这个contains方法。如果A元素包含B元素,则返回true,否则false。唯一不支持这个方法的是IE的死对头firefox。

<!doctype html> <title>dom contains 方法 by 司徒正美</title> <meta charset=”utf-8″/> <meta name=”keywords” content=”dom contains 方法 by 司徒正美” /> <meta name=”description” content=”dom contains 方法 by 司徒正美” /> <mce:script type=”text/javascript”><!– window.onload = function(){ var A = document.getElementById(‘parent’), B = document.getElementById(‘child’); alert(A.contains(B)); alert(B.contains(A)); } // –></mce:script> <h2 style=”text-align:center” mce_style=”text-align:center”>contains方法</h2> <div id=”parent”> <p> <b id=”child” >本例子会在火狐中会报错。</b> </p> </div>

运行代码

不过火狐支持compareDocumentPosition() 方法,这是W3C制定的方法,标准浏览器都支持,不过实用性性很差,因此没有什么人用,推广不开来。它的使用形式与contains差不多,但返回的不是一个布尔值,而是一个很奇怪的数值,它是通过如下方式累加计算出来的:

  • 如果B与A不相连(Position disconnected),加1;(怎么我死活搞不出1来呢???)
  • 如果B是在A的前面,加2;
  • 如果B是在A的后面,加4;
  • 如果B包含A,加8;
  • 如果B被A包含,加16。

<!doctype html> <title>dom contains 方法 by 司徒正美</title> <meta charset=”utf-8″/> <meta name=”keywords” content=”dom contains方法 by 司徒正美” /> <meta name=”description” content=”dom contains方法 by 司徒正美” /> <mce:script type=”text/javascript”><!– window.onload = function(){ var A = document.getElementById(‘parent’), B = document.getElementById(‘child’); alert(A.compareDocumentPosition(B));//B与A不相连,B在A的后面,B被A包含 4+16 = 20 alert(B.compareDocumentPosition(A));//A与B不相连,A在B的前面,A包含B 2+8 = 10 } // –></mce:script> <h2 style=”text-align:center” mce_style=”text-align:center”>compareDocumentPosition方法</h2> <div id=”parent”> <p> <b id=”child” >本例子请在标准浏览器中运行。</b> </p> </div>

运行代码

PPK给出如下解决方法。

 if (window.Node && Node.prototype && !Node.prototype.contains){
    Node.prototype.contains = function (arg) {
      return !!(this.compareDocumentPosition(arg) & 16)
    }
  }

我搞出个更短的:

  if(!!window.find){
    HTMLElement.prototype.contains = function(B){
      return this.compareDocumentPosition(B) - 19 > 0
    }
  }

<!doctype html> <title>dom contains 方法 by 司徒正美</title> <meta charset=”utf-8″/> <meta name=”keywords” content=”dom contains方法 by 司徒正美” /> <meta name=”description” content=”dom contains方法 by 司徒正美” /> <mce:script type=”text/javascript”><!– if(!!window.find){ HTMLElement.prototype.contains = function(B){ return this.compareDocumentPosition(B) – 19 > 0 } } window.onload = function(){ var A = document.getElementById(‘parent’), B = document.getElementById(‘child’); alert(A.contains(B)); alert(B.contains(A)); } // –></mce:script> <h2 style=”text-align:center” mce_style=”text-align:center”>contains方法</h2> <div id=”parent”> <p> <b id=”child” >contains方法</b> </p> </div>

运行代码

玄机博客
© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容