」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何偵測和回應 DOM 屬性變更:MutationObserver 與傳統方法?

如何偵測和回應 DOM 屬性變更:MutationObserver 與傳統方法?

發佈於2024-11-02
瀏覽:766

How to Detect and Respond to DOM Attribute Changes: MutationObserver vs. Legacy Methods?

DOM 屬性變化觸發事件

許多場景需要偵測 DOM 屬性的變化,例如圖片來源變更或 div 的 HTML 變更內容更新。瀏覽器對此功能的支援隨著時間的推移而不斷發展。

DOM 突變事件(舊版)

過去,DOM 突變事件提供了一種偵聽屬性變更的方法。這些事件包括:

  • DOMAttrModified
  • DOMNodeInserted
  • DOMNodeRemoved

但是,瀏覽器對DOM Mutation 事件的支援不一致,導致&&&&]

但是,瀏覽器對DOM Mutation 事件的支援不一致,導致已於2012 年棄用。

MutationObserver API

作為 DOM Mutation Events 的替代品,引入了 MutationObserver API。 MutationObserver 提供了一種更強大且廣受支援的方法來偵測 DOM 屬性和 DOM 其他方面的變更。

使用 MutationObserver,您可以建立觀察者實例並指定要監視的變更類型。當 DOM 中發生任何符合的變更時,觀察者將通知您。

以下是如何使用 MutationObserver 偵測影像來源屬性變更的範例:
// Create an observer instance
const observer = new MutationObserver((mutations) => {
  for (const mutation of mutations) {
    // Check if the mutation is for the "src" attribute
    if (mutation.attributeName === "src") {
      // Do something in response to the source change
    }
  }
});

// Start observing the specified target node
observer.observe(image, { attributes: true, attributeFilter: ["src"] });
// Create觀察者實例 const 觀察者 = new MutationObserver((mutations) => { for (突變的常數突變) { // 檢查突變是否針對「src」屬性 if (mutation.attributeName === "src") { // 回應來源更改做一些事情 } } }); // 開始觀察指定目標節點 observe(image, { attribute: true, attributeFilter: ["src"] });

在本例中,觀察者被配置為監視影像節點的src 屬性,並將呼叫指定的回呼

jQuery Mutation Events 外掛程式

如果您使用jQuery,您可以利用其Mutation Events 外掛程式作為MutationObserver 的替代品。該外掛提供了一個用於處理 DOM 屬性變更的簡化介面,如果您只對特定屬性變更感興趣,則該外掛程式非常有用。
// Create an observer instance
const observer = new MutationObserver((mutations) => {
  for (const mutation of mutations) {
    // Check if the mutation is for the "src" attribute
    if (mutation.attributeName === "src") {
      // Do something in response to the source change
    }
  }
});

// Start observing the specified target node
observer.observe(image, { attributes: true, attributeFilter: ["src"] });
$(image).on("DOMAttrModified", (event) = > { if (event.attrName === "src") { // 回應來源更改做一些事情 } });

透過利用 MutationObserver 或 jQuery Mutation Events 插件,您可以有效地檢測 DOM 屬性中的變更並執行自訂操作來回應這些變更。

最新教學 更多>
  • Tailwind CSS 簡介 – 實用程式優先的框架
    Tailwind CSS 簡介 – 實用程式優先的框架
    Tailwind CSS 簡介 – 實用程式優先的框架 在本文中,我們將探索 Tailwind CSS,這是一個流行的實用程式優先 CSS 框架,可讓您快速建立現代網站,而無需編寫自訂 CSS。與傳統的 CSS 框架不同,Tailwind 不附帶預先設計的元件,而是提供實用程式類,...
    程式設計 發佈於2024-11-07
  • 如何使用 jQuery 確定 HTML 元素是否為空?
    如何使用 jQuery 確定 HTML 元素是否為空?
    使用jQuery 查找空HTML 元素如果您需要在Web 應用程式中確定HTML 元素是否為空,jQuery 提供了方便的方法這樣做的方法。以下是使用jQuery 完成此操作的方法:使用is(':empty') 選擇器:is(':empty') 選擇器檢查是否元素沒有...
    程式設計 發佈於2024-11-07
  • 如何在非整合網站的 JavaScript 控制台中包含 jQuery?
    如何在非整合網站的 JavaScript 控制台中包含 jQuery?
    在 JavaScript 控制台中包含 jQuery在 JavaScript 控制台中包含 jQuery 對於缺乏整合的網站來說是有益的。這使得開發人員能夠利用 jQuery 的功能,例如檢索表中的行數,甚至在本身不支援 jQuery 的網站上也是如此。 要在 JavaScript 控制台中包含 j...
    程式設計 發佈於2024-11-07
  • 儘管使用了有效的 INSERT 語句,為什麼我的 JDBC 程式碼仍會拋出 MySQLSyntaxErrorException?
    儘管使用了有效的 INSERT 語句,為什麼我的 JDBC 程式碼仍會拋出 MySQLSyntaxErrorException?
    JDBC Exception: MySQLSyntaxError with Valid SQL Statement在本文中,我們深入研究使用JDBC 向資料庫插入資料時遇到的問題。 MySQL 資料庫。儘管在 MySQL Workbench 中執行了有效的 INSERT 語句,我們還是收到了 MyS...
    程式設計 發佈於2024-11-07
  • 如何使用數組函數按列值比較物件數組?
    如何使用數組函數按列值比較物件數組?
    使用數組函數按列值比較物件數組許多程式語言都提供用於比較數組的內建函數。但是,這些函數通常使用原始資料類型和數組,而不是物件數組。這就提出瞭如何根據特定屬性或列來比較物件數組的問題。 為了解決這個問題,PHP 提供了 array_udiff,該函數可以透過指定自訂比較函數來比較物件陣列。考慮以下範例...
    程式設計 發佈於2024-11-07
  • React 的 useEffect Hook 簡化:像專業人士一樣管理副作用
    React 的 useEffect Hook 簡化:像專業人士一樣管理副作用
    了解 React 中的 useEffect:从零到英雄 React 已成为构建动态用户界面最流行的 JavaScript 库之一。 React 中最重要的钩子之一是 useEffect,它允许开发人员管理功能组件中的副作用。副作用包括获取数据、设置订阅或手动操作 DOM 等操作。在...
    程式設計 發佈於2024-11-07
  • 擴展 Node.js 應用程式:技術、工具和最佳實踐
    擴展 Node.js 應用程式:技術、工具和最佳實踐
    随着 Node.js 应用程序的增长,对更好的性能和可扩展性的需求也在增加。 Node.js 旨在处理大规模数据密集型应用程序,但了解如何正确扩展它对于在负载下保持性能和可用性至关重要。在本文中,我们将介绍有效扩展 Node.js 应用程序的关键技术和工具。 为什么要扩展 Node....
    程式設計 發佈於2024-11-07
  • 使用 PHP 的動態圖像畫廊:在線上展示您的作品
    使用 PHP 的動態圖像畫廊:在線上展示您的作品
    使用PHP建立動態影像畫廊的步驟:安裝相依性:PHP GD庫和(可選)ImageMagick。建立畫廊頁面:循環遍歷要顯示的圖像並產生縮圖(使用createThumbnail()函數)。輸出影像縮圖:使用HTML建立一個無序列表來顯示縮圖。新增其他功能(選用):分頁、排序​​、篩選、上傳表單和燈箱效...
    程式設計 發佈於2024-11-07
  • 學習 CSS:我設計網頁樣式的第一步
    學習 CSS:我設計網頁樣式的第一步
    從週一到今天,我向前邁出了重要的一步,深入研究了 CSS,一種融入網頁的樣式語言。 ? 先學習基礎知識-選擇器、程式碼區塊、宣告及其值。看到幾行程式碼如何將純 HTML 轉換為具有視覺吸引力的內容是令人興奮的。在CSS 中,樣式可以透過三種方式實現:內聯樣式(透過在開始標記中添加style 屬性)...
    程式設計 發佈於2024-11-07
  • 新手前端開發人員面試問題
    新手前端開發人員面試問題
    HTML Interview - 5 Questions 1. What is HTML5 and what are its new features? Answer: HTML5 is the latest version of HTML, which includes new semantic...
    程式設計 發佈於2024-11-07
  • 在 Python 中實現異常處理的最佳實踐
    在 Python 中實現異常處理的最佳實踐
    编写有效的异常处理代码对于创建健壮且可维护的应用程序至关重要。 以下是在 Python 中编写异常处理代码的一些最佳实践: 1. 只捕捉你能处理的东西 具体说明: 捕获特定异常,而不是使用广泛的 except 子句。 这确保了只有您期望并知道如何处理的异常才会被捕获。 try: ...
    程式設計 發佈於2024-11-07
  • 如何銷售 Next.js 程式碼並增加收入
    如何銷售 Next.js 程式碼並增加收入
    Next.js 是一個被 Web 開發人員廣泛使用的 React 框架,因為它能夠建立高效能 Web 應用程式以及伺服器端渲染和動態路由等功能。如果您是一位擁有 Next.js 經驗的開發人員,您可以透過出售您創建的程式碼來利用這種專業知識。以下是銷售 Next.js 程式碼並增加收入的一些有效方法...
    程式設計 發佈於2024-11-07
  • CSS 中的 Pt 與 Px:什麼時候應該使用每個測量單位?
    CSS 中的 Pt 與 Px:什麼時候應該使用每個測量單位?
    解讀細微差別:CSS 中的 pt 與 px在網頁設計領域,CSS 是樣式元素的支柱。造型的一個重要方面是選擇合適的測量單位。 pt 和 px 是兩個流行的選項,但它們的差異常常讓我們感到困惑。讓我們深入研究這些單位的複雜性,以便對其使用做出明智的決定。 有什麼差別? 與人們最初的假設相反,CSS 中...
    程式設計 發佈於2024-11-07
  • 在網頁設計中什麼時候應該使用絕對定位?
    在網頁設計中什麼時候應該使用絕對定位?
    絕對定位在網頁設計上是禁忌嗎? 在設計網頁時,您可能會遇到建議使用絕對定位的建議對於頁面元素來說,這是不受歡迎的,而應該提倡相對定位。這就引發了關於此建議背後的基本原理以及在這些定位方法之間進行選擇時應遵循的指南的問題。 讓我們深入探討這個主題:在像棋遊戲中的絕對定位在您的情況下,您正在創建類似國際...
    程式設計 發佈於2024-11-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3