DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> WEB網站前端 >> 關於網頁技巧 >> 比較文檔位置
比較文檔位置
編輯:關於網頁技巧     

一個很棒的 blog 文章,是 PPK 兩年前寫的,文章中解釋了 contains() 和 compareDocumentPosition() 方法運行在他們各自的浏覽器上。從那起,我已經對這些方法做了大量的研究,並且已經在很多場合使用他們。在很多任務中,他們被證明是非常有用的(特別關於結構的抽象 DOM 選擇器)。

1、DOMElement.contains(DOMNode)

這個方法起先用在 IE ,用來確定 DOM Node 是否包含在另一個 DOM Element 中。

當嘗試優化 CSS 選擇器遍歷(像:“#id1 #id2”),這個方法很有用。你可以通過 getElementById 得到元素,然後使用 .contains() 確定 #id1 實際上是否包含 #id2。

注意點:如果 DOM Node 和 DOM Element 相一致,.contains() 將返回 true ,雖然,一個元素不能包含自己。

這裡有一個簡單的執行包裝,可以運行在:Internet Explorer, Firefox, Opera, and Safari。

function contains(a, b) {
 return a.contains ? a != b && a.contains(b) : !!(a.compareDocumentPosition(arg) & 16);
}

2、NodeA.compareDocumentPosition(NodeB)

這個方法是 DOM Level 3 specification 的一部分,允許你確定 2 個 DOM Node 之間的相互位置。這個方法比 .contains() 強大。這個方法的一個可能應用是排序 DOM Node 成一個詳細精確的順序。

使用這個方法你可以確定關於一個元素位置的一連串的信息。所有的這些信息將返回一個比特碼(Bit,比特,亦稱二進制位)。

對於那些,人們知之甚少。比特碼是將多重數據存儲為一個簡單的數字(譯者注:0 或 1)。你最終打開 / 關閉個別數目(譯者注:打開/關閉對應 0 /1),將給你一個最終的結果。

這裡是從 NodeA.compareDocumentPosition(NodeB) 返回的結果,包含你可以得到的信息。

Bits          Number        Meaning
000000         0              元素一致
000001         1              節點在不同的文檔(或者一個在文檔之外)
000010         2              節點 B 在節點 A 之前
000100         4              節點 A 在節點 B 之前
001000         8              節點 B 包含節點 A
010000         16             節點 A 包含節點 B
100000         32             浏覽器的私有使用

現在,這意味著一個可能的結果類似於:

<div id="a">
 <div id="b"></div>
</div>
<script>
 alert( document.getElementById("a").compareDocumentPosition(document.getElementById("b")) == 20);
</script>

一旦一個節點 A 包含另一個節點 B,包含 B(+16) 且在 B 之前(+4),則最後的結果是數字 20 。如果你查看比特發生的變化,將增加你的理解。

000100 (4) + 010000 (16) = 010100 (20)

這個,毫無疑問,有助於理解單個最混亂的 DOM API 方法。當然,他的價值當之無愧的。

現在,DOMNode.compareDocumentPosition 在 Firefox 和 Opera 中是可用的。然而,有一些技巧,我們可以用來在 IE 中執行他。

// Compare Position - MIT Licensed, John Resig
function comparePositi

12下一頁
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved