厭倦了JavaScript的父節點遍歷挑戰?找到合適的祖先元素可能很棘手,尤其是在深層嵌套或動態的HTML結構中。讓我們探討closest()
方法如何簡化此過程。
考慮此HTML片段:
<div data-id="123"> 點擊我 </div>
使用parentNode
直接獲取data-id
在按鈕之後:
const button = document.queryselector(“ button”); button.AddeventListener(“單擊”,(EVT)=> { console.log(evt.target.parentnode.dataset.id); //打印“ 123” });
但是,這種方法失敗了,築巢更複雜:
<div data-id="123"> <div> <h1 id="一些標題">一些標題</h1> <button>點擊我</button> </div> </div>
鏈接多次parentNode
是繁瑣且無法實現的。循環while
涉及的較舊的解決方案:
函數getParentNode(el,tagName){ while(el && el.parentnode){ el = el.parentnode; if(el && el.tagname === tagname.touppercase()){ 返回el; } } 返回null; }
功能性雖然不靈活,並且不處理超越標籤名稱的選擇器。 jQuery的.closest()
提供了一個出色的解決方案,但是為單個功能添加庫通常是過度的。
輸入Element.closest()
本地Element.closest()
方法提供了一個優雅的解決方案:
const button = document.queryselector(“ button”); console.log(button.closest(“ div”)); //返回<div> 元素<p><code>closest()</code>向上遍歷DOM,直到找到符合提供的選擇器的祖先為止。此選擇器可以是任何有效的CSS選擇器:ID,類,屬性或標籤名稱。</p> <pre class="brush:php;toolbar:false"> element.closest(“#my-id”); //工作 element.closest(“。my-class”); //工作 element.closest(“ [data-id]”); //工作
如果找不到匹配的祖先, closest()
返回null
。這使有條件的檢查變得容易:
const button = document.queryselector(“ button”); if(button.closest(“。my-class”)){ console.log(“找到!”); } 別的 { console.log(“找不到!”); }
現實世界應用
- 下拉次數:檢測到下拉菜單外的單擊以關閉它:
// ...(事件處理代碼)... 如果(!evt.target.closest(“。菜單dropdown”)){ //關閉下拉 }
- 表:與這些行中的按鈕交互時,從表行中檢索數據屬性:
功能getUserid(target){ 返回target.closest(“ [data-userid]”)。 dataset.userid; }
- 反應表:與上述相似,但在一個反應組件中:
功能handleclick(evt){ const userId = evt.currenttarget.closest(“ [data-userid]”)。 dataset.userid; // ... }
- 模態:單擊模式內容外關閉模式:
// ...(事件處理代碼)... 如果(!evt.target.closest(“。modal-inner”)){ //關閉模態 }
瀏覽器支持
Element.closest()
享有出色的瀏覽器支持,不包括舊版本的Internet Explorer。這使其成為大多數項目的安全可靠選擇。
Element.closest()
提供了一種簡潔有效的方法來導航DOM層次結構,從而消除了許多常見場景中對複雜循環或外部庫的需求。它的多功能性和廣泛的瀏覽器支持使其成為任何JavaScript開發人員的寶貴工具。
以上是JavaScript最近距離()方法的實際用例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

對於Astro,我們可以在構建過程中生成大部分網站,但是有一小部分服務器端代碼可以使用Fuse.js之類的搜索功能來處理搜索功能。在此演示中,我們將使用保險絲搜索一組個人“書籤”


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。