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

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

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

前言

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

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

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

contains方法

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

參數(shù)

otherNode

要測試的節(jié)點

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

返回值

返回一個布爾值,如果 otherNode 包含在節(jié)點中會返回 true,否則返回 false

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

示例

下面的函數(shù)用來檢查一個元素是否是 body 元素的后代元素。由于 contains 會包含元素自身,而確定 body 是否包含自身不是設(shè)計 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

兼容處理

因為是原生方法,兼容性有限,所以針對公司的項目兼容需求,還需要進(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;
};

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

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

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

總結(jié)

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    Node.js+pm2+ssh2模塊實現(xiàn)簡單的自動化部署腳本

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

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

    下面小編就為大家?guī)硪黄狽ode.js學(xué)習(xí)之TCP/IP數(shù)據(jù)通訊(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    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時的一些錯誤以及處理辦法

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

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

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

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

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

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

最新評論