最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

javascript contains和compareDocumentPosition 方法來(lái)確定是否HTML節(jié)點(diǎn)間的關(guān)系

 更新時(shí)間:2010年02月04日 16:42:48   作者:  
一個(gè)很棒的 blog 文章,是 PPK 兩年前寫(xiě)的,文章中解釋了 contains() 和 compareDocumentPosition() 方法運(yùn)行在他們各自的瀏覽器上。

從那起,我已經(jīng)對(duì)這些方法做了大量的研究,并且已經(jīng)在很多場(chǎng)合使用他們。在很多任務(wù)中,他們被證明是非常有用的(特別關(guān)于結(jié)構(gòu)的抽象 DOM 選擇器)。
1、DOMElement.contains(DOMNode)
這個(gè)方法起先用在 IE ,用來(lái)確定 DOM Node 是否包含在另一個(gè) DOM Element 中。
當(dāng)嘗試優(yōu)化 CSS 選擇器遍歷(像:“#id1 #id2”),這個(gè)方法很有用。你可以通過(guò) getElementById 得到元素,然后使用 .contains() 確定 #id1 實(shí)際上是否包含 #id2。
注意點(diǎn):如果 DOM Node 和 DOM Element 相一致,.contains() 將返回 true ,雖然,一個(gè)元素不能包含自己。
這里有一個(gè)簡(jiǎn)單的執(zhí)行包裝,可以運(yùn)行在:Internet Explorer, Firefox, Opera, and Safari。

復(fù)制代碼 代碼如下:

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


2、NodeA.compareDocumentPosition(NodeB)
這個(gè)方法是 DOM Level 3 specification 的一部分,允許你確定 2 個(gè) DOM Node 之間的相互位置。這個(gè)方法比 .contains() 強(qiáng)大。這個(gè)方法的一個(gè)可能應(yīng)用是排序 DOM Node 成一個(gè)詳細(xì)精確的順序。
使用這個(gè)方法你可以確定關(guān)于一個(gè)元素位置的一連串的信息。所有的這些信息將返回一個(gè)比特碼(Bit,比特,亦稱二進(jìn)制位)。
對(duì)于那些,人們知之甚少。比特碼是將多重?cái)?shù)據(jù)存儲(chǔ)為一個(gè)簡(jiǎn)單的數(shù)字(譯者注:0 或 1)。你最終打開(kāi) / 關(guān)閉個(gè)別數(shù)目(譯者注:打開(kāi)/關(guān)閉對(duì)應(yīng) 0 /1),將給你一個(gè)最終的結(jié)果。
這里是從 NodeA.compareDocumentPosition(NodeB) 返回的結(jié)果,包含你可以得到的信息。
Bits Number Meaning
000 0 元素一致
001 1 節(jié)點(diǎn)在不同的文檔(或者一個(gè)在文檔之外)
010 2 節(jié)點(diǎn) B 在節(jié)點(diǎn) A 之前
100 4 節(jié)點(diǎn) A 在節(jié)點(diǎn) B 之前
000 8 節(jié)點(diǎn) B 包含節(jié)點(diǎn) A
000 16 節(jié)點(diǎn) A 包含節(jié)點(diǎn) B
000 32 瀏覽器的私有使用
現(xiàn)在,這意味著一個(gè)可能的結(jié)果類似于:
復(fù)制代碼 代碼如下:

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

一旦一個(gè)節(jié)點(diǎn) A 包含另一個(gè)節(jié)點(diǎn) B,包含 B(+16) 且在 B 之前(+4),則最后的結(jié)果是數(shù)字 20 。如果你查看比特發(fā)生的變化,將增加你的理解。
100 (4) + 010000 (16) = 010100 (20)
這個(gè),毫無(wú)疑問(wèn),有助于理解單個(gè)最混亂的 DOM API 方法。當(dāng)然,他的價(jià)值當(dāng)之無(wú)愧的。
現(xiàn)在,DOMNode.compareDocumentPosition 在 Firefox 和 Opera 中是可用的。然而,有一些技巧,我們可以用來(lái)在 IE 中執(zhí)行他。
復(fù)制代碼 代碼如下:

// 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 提供給我們一些可以使用的方法和屬性。開(kāi)始,使用 .contains() 方法(如我們前面所討論的),以便給我們包含(+16)或者被包含(+8)的結(jié)果。IE 還有一個(gè) .sourceIndex 屬性在所有的 DOM Element 對(duì)應(yīng)著元素在文檔中的位置,例如:document.documentElement.sourceIndex == 0。因?yàn)槲覀冇羞@個(gè)信息,我們可以完成兩個(gè) compareDocumentPosition 難題:在前面(+2)和在后面(+4)。另外,如果一個(gè)元素不在當(dāng)前的文檔,.sourceIndex 將等于 -1,這個(gè)給我們另外一個(gè)回答(+1)。最后,通過(guò)這個(gè)過(guò)程的推斷,我們可以確定如果一個(gè)元素等于他本身,返回一個(gè)空的比特碼(+0)。
這個(gè)函數(shù)可以在 Internet Explorer、Firefox 和 Opera 中運(yùn)行。但在 Safari 中卻有殘缺功能(因?yàn)樗挥?contains() 方法,而沒(méi)有 .sourceIndex 屬性。我們只能得到 包含(+16),被包含(+8),其他的所有結(jié)果都將返回(+1)代表一個(gè)斷開(kāi))。
PPK 提供了一個(gè)關(guān)于通過(guò)創(chuàng)建一個(gè) getElementsByTagNames 方法使新功能可以被使用的很棒的例子。讓我們改編他到我們的新方法中:
復(fù)制代碼 代碼如下:

// 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);
});
}


我們現(xiàn)在可以使用他來(lái)按次序構(gòu)建一個(gè)站點(diǎn)的目錄:
getElementsByTagNames("h1, h2, h3");
雖然 Firefox 和 Opera 都采取了一些主動(dòng)落實(shí)這一方法。我依然期待看到更多的瀏覽器進(jìn)入,以幫助向前推動(dòng)

相關(guān)文章

  • 不唐突的JavaScript的七條準(zhǔn)則整理收集

    不唐突的JavaScript的七條準(zhǔn)則整理收集

    在開(kāi)始設(shè)計(jì)你的腳本之前,要考慮的第一件事情就是檢查一下你要為其編寫(xiě)腳本的HTML代碼,看看有什么東西可以幫助你達(dá)到目的。
    2008-10-10
  • 用javascript實(shí)現(xiàn)倒計(jì)時(shí)效果

    用javascript實(shí)現(xiàn)倒計(jì)時(shí)效果

    這篇文章主要為大家詳細(xì)介紹了用javascript實(shí)現(xiàn)倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • JS Promise axios 請(qǐng)求結(jié)果后面的.then() 是什么意思

    JS Promise axios 請(qǐng)求結(jié)果后面的.then() 是什么意思

    本文主要介紹了JS Promise axios 請(qǐng)求結(jié)果后面的 .then() 是什么意思,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • moment.js使用超詳細(xì)教程

    moment.js使用超詳細(xì)教程

    Moment.js是一個(gè)輕量級(jí)的JavaScript時(shí)間庫(kù),它方便了日常開(kāi)發(fā)中對(duì)時(shí)間的操作,提高了開(kāi)發(fā)效率下,本文給大家介紹moment.js使用超詳細(xì)教程,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • JavaScript中定義函數(shù)的三種方法

    JavaScript中定義函數(shù)的三種方法

    這篇文章主要介紹了JavaScript中定義函數(shù)的三種方法,本文直接給出代碼實(shí)現(xiàn),同時(shí)給出了構(gòu)造函數(shù)的相關(guān)知識(shí),需要的朋友可以參考下
    2015-03-03
  • ES6 Array常用擴(kuò)展的應(yīng)用實(shí)例分析

    ES6 Array常用擴(kuò)展的應(yīng)用實(shí)例分析

    這篇文章主要介紹了ES6 Array常用擴(kuò)展的應(yīng)用,結(jié)合實(shí)例形式分析各種常見(jiàn)擴(kuò)展方法針對(duì)Array數(shù)組的轉(zhuǎn)換、遍歷、查找、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • 微信小程序?qū)崿F(xiàn)分享到朋友圈功能

    微信小程序?qū)崿F(xiàn)分享到朋友圈功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)分享到朋友圈功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 微信小程序progress組件使用詳解

    微信小程序progress組件使用詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序progress組件的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Bootstrap Metronic完全響應(yīng)式管理模板學(xué)習(xí)筆記

    Bootstrap Metronic完全響應(yīng)式管理模板學(xué)習(xí)筆記

    這篇文章主要為大家分享了Bootstrap Metronic完全響應(yīng)式管理模板學(xué)習(xí)筆記,感興趣的小伙伴們可以參考一下
    2016-07-07
  • JavaScript將數(shù)組轉(zhuǎn)換為鏈表的方法

    JavaScript將數(shù)組轉(zhuǎn)換為鏈表的方法

    這篇文章主要介紹了JavaScript將數(shù)組轉(zhuǎn)換為鏈表的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論

广南县| 叙永县| 潮州市| 介休市| 高密市| 鄂尔多斯市| 甘孜| 桐庐县| 宜州市| 定远县| 西昌市| 易门县| 青岛市| 天峻县| 门源| 邵武市| 绥宁县| 颍上县| 吴堡县| 桦南县| 金门县| 读书| 丹巴县| 汨罗市| 荣成市| 常熟市| 胶南市| 武宁县| 辽宁省| 南汇区| 冀州市| 溧阳市| 沈丘县| 改则县| 巴南区| 天水市| 惠州市| 游戏| 大埔县| 南漳县| 宝清县|