欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

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

先說(shuō)下寫(xiě)這篇文章的由來(lái)吧,接到一個(gè)需求需要在項(xiàng)目中實(shí)現(xiàn)一個(gè)效果,就是點(diǎn)擊其他區(qū)域隱藏dom的操作,試了很多的方式,感覺(jué)都不是特別合理,所以針對(duì)當(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

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

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

返回值

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

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

示例

下面的函數(shù)用來(lái)檢查一個(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)槭窃椒?,兼容性有限,所以針?duì)公司的項(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è)檢測(cè)節(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)在各種瀏覽器中兼容檢測(cè)節(jié)點(diǎn)是否存在于指定容器中的功能。

總結(jié)

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

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

相關(guān)文章

  • websocket實(shí)現(xiàn)Vue?3和Node.js之間的實(shí)時(shí)消息推送

    websocket實(shí)現(xiàn)Vue?3和Node.js之間的實(shí)時(shí)消息推送

    使用?WebSocket?實(shí)現(xiàn)實(shí)時(shí)消息推送是一種高效的方式,可以在客戶端和服務(wù)器之間建立長(zhǎng)連接,實(shí)現(xiàn)低延遲的雙向通信,以下是一個(gè)簡(jiǎn)單的示例,展示如何在前端使用?Vue?3?和后端使用?Node.js?搭建一個(gè)?WebSocket?實(shí)現(xiàn)實(shí)時(shí)消息推送的應(yīng)用
    2024-06-06
  • nodejs實(shí)現(xiàn)日志讀取、日志查找及日志刷新的方法分析

    nodejs實(shí)現(xiàn)日志讀取、日志查找及日志刷新的方法分析

    這篇文章主要介紹了nodejs實(shí)現(xiàn)日志讀取、日志查找及日志刷新的方法,涉及nodejs日期時(shí)間運(yùn)算、轉(zhuǎn)換及日志讀寫(xiě)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • NodeJs 實(shí)現(xiàn)簡(jiǎn)單WebSocket即時(shí)通訊的示例代碼

    NodeJs 實(shí)現(xiàn)簡(jiǎn)單WebSocket即時(shí)通訊的示例代碼

    這篇文章主要介紹了NodeJs 實(shí)現(xiàn)簡(jiǎn)單WebSocket即時(shí)通訊的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 詳解Node.js使用token進(jìn)行認(rèn)證的簡(jiǎn)單示例

    詳解Node.js使用token進(jìn)行認(rèn)證的簡(jiǎn)單示例

    這篇文章主要介紹了詳解Node.js使用token進(jìn)行認(rèn)證的簡(jiǎn)單示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Node.js+pm2+ssh2模塊實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)化部署腳本

    Node.js+pm2+ssh2模塊實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)化部署腳本

    本文將介紹如何使用Node.js和ssh2模塊實(shí)現(xiàn)一個(gè)簡(jiǎn)單的部署腳本,將本地的項(xiàng)目文件上傳到遠(yuǎn)程服務(wù)器上,我們將使用dotenv模塊來(lái)管理環(huán)境變量,以及child_process模塊來(lái)執(zhí)行命令行操作
    2023-10-10
  • Node.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)

    Node.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)

    下面小編就為大家?guī)?lái)一篇Node.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實(shí)例講解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 詳解node.js 事件循環(huán)

    詳解node.js 事件循環(huán)

    這篇文章主要介紹了node.js 事件循環(huán)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法

    vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法

    在前端開(kāi)發(fā)過(guò)程中,npm的使用是少不了的,所以需要知道基本的操作使用,并且了解常見(jiàn)的異常情況處理,下面這篇文章主要給大家介紹了關(guān)于vscode執(zhí)行npm時(shí)的一些錯(cuò)誤以及處理辦法的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Node.js內(nèi)置模塊events事件監(jiān)聽(tīng)發(fā)射詳解

    Node.js內(nèi)置模塊events事件監(jiān)聽(tīng)發(fā)射詳解

    這篇文章主要為大家介紹了Node.js內(nèi)置模塊events事件監(jiān)聽(tīng)發(fā)射詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+)

    詳解nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+)

    本篇文章主要介紹了nodejs實(shí)現(xiàn)本地上傳圖片并預(yù)覽功能(express4.0+) ,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06

最新評(píng)論