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

一文詳解Node.contain?函數(shù)兼容處理

 更新時(shí)間:2023年03月08日 11:04:40   作者:前端奶爸  
這篇文章主要為大家介紹了Node.contain?函數(shù)兼容處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

好久不寫文章了,都不知道跟大家怎么打招呼了,新的一年開始,也應(yīng)該收心,做一些文字的記錄以及分享了。

先說下寫這篇文章的由來吧,接到一個(gè)需求需要在項(xiàng)目中實(shí)現(xiàn)一個(gè)效果,就是點(diǎn)擊其他區(qū)域隱藏dom的操作,試了很多的方式,感覺都不是特別合理,所以針對當(dāng)前需求做了一個(gè)方法的實(shí)現(xiàn),使用dom原生方法 contains進(jìn)行判斷當(dāng)前點(diǎn)擊的元素是否是指定父級(jí)的子級(jí),然后進(jìn)行判斷是否隱藏指定元素。

具體業(yè)務(wù)邏輯方法就不在這里贅述了,主要講下contains方法。

contains方法

Node 接口的 contains()  方法返回一個(gè)布爾值,表示一個(gè)節(jié)點(diǎn)是否是給定節(jié)點(diǎn)的后代,即該節(jié)點(diǎn)本身、其直接子節(jié)點(diǎn)(childNodes)、子節(jié)點(diǎn)的直接子節(jié)點(diǎn)等。

參數(shù)

otherNode

要測試的節(jié)點(diǎn)。

備注:  otherNode 不是可選的,但是可以設(shè)置為 null。

返回值

返回一個(gè)布爾值,如果 otherNode 包含在節(jié)點(diǎn)中會(huì)返回 true,否則返回 false。

如果 otherNode 參數(shù)為 null,則 contains() 始終返回 false。

示例

下面的函數(shù)用來檢查一個(gè)元素是否是 body 元素的后代元素。由于 contains 會(huì)包含元素自身,而確定 body 是否包含自身不是設(shè)計(jì) isInPage 的意圖,這種情況明確返回 false。

function isInPage(node) {
  return (node === document.body) ? false : document.body.contains(node);
}

規(guī)范

Specification
DOM Standard # ref-for-dom-node-contains①

瀏覽器兼容性

Report problems with this compatibility data on GitHub

desktopmobile
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung InternetWebView Android
contains16Toggle history12Toggle history9Toggle history7Toggle history1.1Toggle history18Toggle history9Toggle history10.1Toggle history1Toggle history1.0Toggle history4.4Toggle history

兼容處理

因?yàn)槭窃椒?,兼容性有限,所以針對公司的?xiàng)目兼容需求,還需要進(jìn)行兼容處理。具體代碼如下:

const contains = (root, el) => {
    if (root.compareDocumentPosition) return root === el || !!(root.compareDocumentPosition(el) & 16);
    if (root.contains && el.nodeType === 1) {
        return root.contains(el) && root !== el;
    }
    while ((el = el.parentNode)) if (el === root) return true;
    return false;
};

這段代碼實(shí)現(xiàn)了一個(gè)檢測節(jié)點(diǎn)是否存在于指定容器中的函數(shù)contains,其中使用了三種不同的方式進(jìn)行判斷:

  • 如果瀏覽器支持compareDocumentPosition方法,則直接使用該方法進(jìn)行判斷。首先判斷root節(jié)點(diǎn)是否等于el節(jié)點(diǎn),如果是,則返回true;否則,使用compareDocumentPosition方法判斷el節(jié)點(diǎn)是否在root節(jié)點(diǎn)中,如果結(jié)果為16,則返回true,否則返回false
  • 如果瀏覽器不支持compareDocumentPosition方法,但支持contains方法,則判斷el節(jié)點(diǎn)是否是一個(gè)元素節(jié)點(diǎn)(nodeType為1),如果是,則使用contains方法判斷el節(jié)點(diǎn)是否在root節(jié)點(diǎn)中,并且root節(jié)點(diǎn)不等于el節(jié)點(diǎn),如果滿足,則返回true,否則返回false。
  • 如果瀏覽器既不支持compareDocumentPosition方法,也不支持contains方法,則使用while循環(huán)遍歷el節(jié)點(diǎn)的所有祖先節(jié)點(diǎn),判斷是否有節(jié)點(diǎn)等于root節(jié)點(diǎn),如果有,則返回true,否則返回false

綜合三種方式,可以實(shí)現(xiàn)在各種瀏覽器中兼容檢測節(jié)點(diǎn)是否存在于指定容器中的功能。

總結(jié)

方法整體的實(shí)現(xiàn)難度不是很大,就是針對當(dāng)前原生方法的不支持的內(nèi)容進(jìn)行補(bǔ)充,

以上就是一文詳解Node.contain 函數(shù)兼容處理的詳細(xì)內(nèi)容,更多關(guān)于Node.contain 函數(shù)兼容的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs 生成和導(dǎo)出 word的實(shí)例代碼

    nodejs 生成和導(dǎo)出 word的實(shí)例代碼

    前段時(shí)間由于項(xiàng)目需求,得做excel和word的導(dǎo)出功能.這篇文章主要介紹了nodejs 生成和導(dǎo)出 word的實(shí)例代碼,需要的朋友可以參考下
    2018-07-07
  • nodejs中向HTTP響應(yīng)傳送進(jìn)程的輸出

    nodejs中向HTTP響應(yīng)傳送進(jìn)程的輸出

    這篇文章主要介紹了nodejs中向HTTP響應(yīng)傳送進(jìn)程的輸出 ,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • 5分鐘教你用nodeJS手寫一個(gè)mock數(shù)據(jù)服務(wù)器的方法

    5分鐘教你用nodeJS手寫一個(gè)mock數(shù)據(jù)服務(wù)器的方法

    這篇文章主要介紹了5分鐘教你用nodeJS手寫一個(gè)mock數(shù)據(jù)服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解

    配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解

    這篇文章主要介紹了配置node服務(wù)器并且鏈接微信公眾號(hào)接口配置步驟詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • nodejs中函數(shù)的調(diào)用實(shí)例詳解

    nodejs中函數(shù)的調(diào)用實(shí)例詳解

    本文通過實(shí)例代碼給大家介紹了nodejs函數(shù)的調(diào)用,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • node.js中express中間件body-parser的介紹與用法詳解

    node.js中express中間件body-parser的介紹與用法詳解

    這篇文章主要給大家介紹了關(guān)于node.js中express中間件body-parser的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 利用nginx + node在阿里云部署https的步驟詳解

    利用nginx + node在阿里云部署https的步驟詳解

    這篇文章主要給大家介紹了關(guān)于利用nginx + node在阿里云部署https的步驟,文中通過圖文及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境

    Windows 系統(tǒng)下安裝和部署Egret的開發(fā)環(huán)境

    Egret基于TypeScript開發(fā)的,而TypeScript編譯工具tsc是基于Node.js 開發(fā)的。所以在安裝過程中,我們先需要對于基礎(chǔ)支持工具進(jìn)行安裝。
    2014-07-07
  • 說說如何利用 Node.js 代理解決跨域問題

    說說如何利用 Node.js 代理解決跨域問題

    這篇文章主要介紹了Node.js代理解決跨域問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Node.js使用Sharp.js進(jìn)行圖像處理的實(shí)踐與技巧

    Node.js使用Sharp.js進(jìn)行圖像處理的實(shí)踐與技巧

    Sharp.js 是一個(gè)高性能的 Node.js 圖像處理庫,基于 C 語言編寫的 libvips 庫封裝而來,提供了便捷、高效的圖片編輯與轉(zhuǎn)換功能,以下是對 Sharp.js 的深入解析,包括全方位實(shí)踐與技巧,需要的朋友可以參考下
    2024-08-08

最新評論

金乡县| 彭泽县| 当阳市| 崇信县| 信阳市| 双鸭山市| 格尔木市| 巴塘县| 寿宁县| 织金县| 桐乡市| 申扎县| 枞阳县| 玛多县| 柘荣县| 通山县| 岳阳县| 安仁县| 新田县| 金门县| 余姚市| 嫩江县| 太仆寺旗| 锡林浩特市| 冕宁县| 册亨县| 监利县| 武陟县| 鄂托克旗| 新民市| 宜君县| 定南县| 沧州市| 仪陇县| 河南省| 石家庄市| 石河子市| 璧山县| 闸北区| 聂拉木县| 高陵县|