肯定節點直接的關係

肯定節點直接的關係,一般使用contains,可是它只能獲得兩個節點是否爲父子節點不能肯定其餘關係。node

compareDocumentPosition()可以肯定節點間的關係,支持這個方法的瀏覽器有
IE9+、Firefox、Safari、Opera9.5和Chrome,該方法返回一個位掩碼(bitmask)
1 無關
2 居前 給定節點在參考節點以前
4 據後 給定節點在參考節點以後
8 包含 給定節點是參考節點的祖先
16 被包含 給定節點是參考節點的後代
contains應該是掩碼16
通用的contains函數
function contains(refNode, otherNode){
    if(typeof refNode.contains == 'function' &&
      (!client.engine.webkit || client.engine.webkit >= 522)){
          return refNode.contains(otherNode)
      }
      else if(typeof refNode.compareDocumentPosition == "function"){
          return !!(refNode.compareDocumentPosition(otherNode) & 16)
      }
      else{
          var node = otherNode.parentNode;
          do{
              if(node === refNode){
                  return true
              }
              else {
                  node = node.parentNode
              }
          } while (node !== null);
          return false;
      }
}
這個函數組合使用了三種方式來肯定一個節點是否是另外一個節點的後代。函數的第一個參數是參考
節點,第二個參數是要檢查的節點。在函數體內,首先檢查refNode中是否存在contains()方法(能力檢測)
這部分代碼還檢查了當前瀏覽器所用的WebKit版本號。若是方法存在並且不是Webkit(!client.engine.webkit),
則繼續執行代碼,不然若是瀏覽器是WebKit且至少是Safari3(WebKit版本號爲522或更高),那麼也能夠繼續指向代碼
在WebKit版本號小於522的Safari瀏覽器中,contains()方法不能正常使用

接下來檢查是否存在compareDocumentPositon()方法,而函數的最後一步則是自otherNode開始向上
遍歷DOM結構,以遞歸方式取得parentNode,並檢查是否與refNode相等。在文檔樹的頂端,parentNode的值等於null,
因而循環結束。這是針對舊版本Safari設計的一個後備策略。
相關文章
相關標籤/搜索