亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 網頁設計 > 正文

比較文檔位置

2024-08-30 08:33:52
字體:
來源:轉載
供稿:網友

一個很棒的 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 comparePosition(a, b){
return a.compareDocumentPosition ?
a.compareDocumentPosition(b) :
a.contains ?
( a != b && a.contains(b) && 16 )
( a != b && b.contains(a) && 8 )
( a.sourceIndex >= 0 && b.sourceIndex >= 0 ?
(a.sourceIndex < b.sourceIndex && 4 )
(a.sourceIndex > b.sourceIndex && 2 ) :
1 ) :
0;
}

IE 提供給我們一些可以使用的方法和屬性。開始,使用 .contains() 方法(如我們前面所討論的),以便給我們包含( 16)或者被包含( 8)的結果。IE 還有一個 .sourceIndex 屬性在所有的 DOM Element 對應著元素在文檔中的位置,例如:document.documentElement.sourceIndex == 0。因為我們有這個信息,我們可以完成兩個 compareDocumentPosition 難題:在前面( 2)和在后面( 4)。另外,如果一個元素不在當前的文檔,.sourceIndex 將等于 -1,這個給我們另外一個回答( 1)。最后,通過這個過程的推斷,我們可以確定如果一個元素等于他本身,返回一個空的比特碼( 0)。
這個函數可以在 Internet Explorer、Firefox 和 Opera 中運行。但在 Safari 中卻有殘缺功能(因為他只有 contains() 方法,而沒有 .sourceIndex 屬性。我們只能得到 包含( 16),被包含( 8),其他的所有結果都將返回( 1)代表一個斷開)。
PPK 提供了一個關于通過創建一個 getElementsByTagNames 方法使新功能可以被使用的很棒的例子。讓我們改編他到我們的新方法中:

我們現在可以使用他來按次序構建一個站點的目錄:
getElementsByTagNames("h1, h2, h3");
雖然 Firefox 和 Opera 都采取了一些主動落實這一方法。我依然期待看到更多的瀏覽器進入,以幫助向前推動。
翻譯自:《Comparing Document Position》
// Original by PPK quirksmode.org
function getElementsByTagNames(list, elem) {
elem = elem || document;
var tagNames = list.split(','), results = [];
for ( var i = 0; i < tagNames.length; i ) {
var tags = elem.getElementsByTagName( tagNames[i] );
for ( var j = 0; j < tags.length; j )
results.push( tags[j] );
}
return results.sort(function(a, b){
return 3 - (comparePosition(a, b) & 6);
});
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产欧美一区二区三区久久| 久久久这里只有精品视频| 成人欧美一区二区三区在线| 91爱爱小视频k| 欧美亚洲在线观看| 久久成人av网站| 国产精品久久久久久久久久东京| 国内成人精品一区| 欧美高清视频免费观看| 日本高清视频一区| 亚洲丝袜在线视频| 亚洲精品成人久久久| 国产精品一区二区久久久| 一区二区欧美激情| 91po在线观看91精品国产性色| 亚洲精品aⅴ中文字幕乱码| 国产精品久久综合av爱欲tv| 日韩精品视频中文在线观看| 成人97在线观看视频| 欧美视频在线免费| 九九久久久久久久久激情| 97人洗澡人人免费公开视频碰碰碰| 久久久久久久999| 精品视频在线播放色网色视频| 国产精品视频yy9099| 欧美xxxwww| 欧美精品久久久久a| 97色在线视频观看| 亚洲午夜精品久久久久久久久久久久| 色妞欧美日韩在线| 国产精品第3页| 久久综合伊人77777蜜臀| 国产精品久久久久久久美男| 欧美成人精品一区| 日韩女优人人人人射在线视频| 久久91精品国产91久久跳| 久久久久国产精品免费网站| 日韩电影中文 亚洲精品乱码| 午夜精品久久久久久久99热| 色午夜这里只有精品| 精品视频久久久| 欧美国产第二页| 海角国产乱辈乱精品视频| 欧美成人小视频| 欧美刺激性大交免费视频| 国产日韩av在线播放| 国产在线播放不卡| 中文字幕日韩精品有码视频| 成人黄色影片在线| 俺去啦;欧美日韩| 亚洲高清不卡av| 久久精品99无色码中文字幕| 欧美丰满少妇xxxxx| 中文字幕精品国产| 国产欧美精品一区二区| 91精品久久久久久久久久另类| 欧美激情乱人伦一区| 91久久精品美女高潮| 亚洲国产精品电影在线观看| 久久久久久久久久久亚洲| 1769国内精品视频在线播放| 欧美成人一区二区三区电影| 日韩美女av在线免费观看| 国产精品丝袜白浆摸在线| 亚洲最大福利视频| 亚洲视频999| 在线日韩av观看| 日韩视频亚洲视频| 国产美女精品免费电影| 亚洲国产欧美一区二区三区久久| 久操成人在线视频| 久久综合伊人77777| 日韩欧美aaa| 日韩不卡在线观看| 久久综合免费视频| 成人有码视频在线播放| 亚洲人成电影网站色xx| 在线观看精品自拍私拍| 国产一区二区三区日韩欧美| 亚洲国产高清自拍| 国产精品爽黄69天堂a| 久久久在线视频| 精品视频在线播放色网色视频| 亚洲国产婷婷香蕉久久久久久| 亚洲专区中文字幕| 亚洲精品国产综合区久久久久久久| 国产中文日韩欧美| 欧美性猛交99久久久久99按摩| 亚洲免费高清视频| 国产日韩综合一区二区性色av| 欧美日韩国产一中文字不卡| 日本精品性网站在线观看| 中文字幕国产精品久久| 精品久久久一区| 国产亚洲精品va在线观看| 精品国产一区二区三区在线观看| 91精品国产成人www| 国产亚洲a∨片在线观看| 欧美成人全部免费| 亚洲的天堂在线中文字幕| 国产精品十八以下禁看| 日韩av在线免费观看| 国产日韩欧美影视| 国产精品主播视频| 亚洲精品一区二三区不卡| 国产在线98福利播放视频| 国产成人精品综合久久久| 97人人爽人人喊人人模波多| 亚洲美女精品久久| 国产69精品久久久久久| 欧美在线观看一区二区三区| 日韩激情视频在线播放| 亚洲成avwww人| 欧美国产中文字幕| 久久亚洲精品中文字幕冲田杏梨| 精品国产欧美一区二区五十路| 91美女片黄在线观| 国产综合久久久久久| 欧美激情国产日韩精品一区18| 91精品中文在线| 亚洲最大中文字幕| 亚洲国产精品va在线看黑人动漫| 91av福利视频| 国产精品扒开腿爽爽爽视频| 成人动漫网站在线观看| 欧美交受高潮1| 中文字幕欧美视频在线| 欧美日韩国产精品一区二区不卡中文| 91精品久久久久久综合乱菊| 欧美国产亚洲精品久久久8v| 51色欧美片视频在线观看| 亚洲人成免费电影| 国产日本欧美一区二区三区在线| 国产精品美女久久久免费| 亚洲天堂第一页| 亚洲一区二区三区成人在线视频精品| 亚洲精品国产精品国自产观看浪潮| 国产精品jizz在线观看麻豆| 国产精品欧美激情| 国产精品视频在线观看| 国产日韩欧美中文| 欧美另类在线观看| www.欧美精品| 91精品国产色综合| 少妇av一区二区三区| 精品香蕉一区二区三区| 美女视频黄免费的亚洲男人天堂| 久久久久久91香蕉国产| 日本精品一区二区三区在线| 日本精品va在线观看| 少妇精69xxtheporn| 少妇久久久久久| 97超级碰碰人国产在线观看| 久久久www成人免费精品张筱雨| 琪琪亚洲精品午夜在线| 亚洲欧美一区二区三区久久| 精品亚洲一区二区三区在线播放| 日韩电影网在线| 国产玖玖精品视频| 亚洲图片欧美午夜| 日韩亚洲成人av在线| 精品一区电影国产| 欧美精品成人91久久久久久久| 亚洲欧洲在线观看|