簡體   English   中英

在元素加載之前將事件添加到DOM中

[英]Add event on element load before it is in the DOM

我想在加載DOM元素時添加一個事件,但是該元素可能尚未在DOM中。

我可以想到兩種解決方案:

(i)將其附加到document.onload() 如果發生,可能需要一段時間才能實現,因此不理想

(ii)使用以下命令檢查DOM元素的存在

window.setInterval(function() {
      if (document.getElementById("id"))  /* do stuff */
    }, 100);

這些都不是很優雅。 有更好的解決方案嗎?

編輯:我忘了提,我不想使用jQuery,並且想要在不觸摸所有頁面的<body>的情況下將我的腳本放在<head>

EDIT2:我這樣做的原因是要跟蹤某些元素的正確加載,並監視它們需要花費多長時間以及是否正確加載。

您可以嘗試事件委派 ..

將click事件附加到文檔,然后檢查要在其上運行功能的元素。

document.onclick = function (event) {
  //IE doesn't pass in the event object
  event = event || window.event;

  //IE uses srcElement as the target
  var target = event.target || event.srcElement;
  var id = target.id;
  if( id === 'id'){
      clickEvent(id);
  }
};

function clickEvent(id){
  console.log("Elemennt with ID : " + id + "has been clicked !!")
};

經過研究,我認為沒有更好的通用方法。 兩者都有一點改進:將檢查放在document.onload()並按固定的時間間隔進行(保留變量以確保我不會重復兩次)。

此頁面確認就​​正確加載DOM而言,兩者都是安全的。

MutationObserver是由現代瀏覽器提供的Web API,用於檢測DOM中的更改。 使用此API,可以偵聽新添加或刪除的節點,屬性更改或文本節點的文本內容更改。

您可以在這里閱讀更多內容https://blog.sessionstack.com/how-javascript-works-tracking-changes-in-the-dom-using-mutationobserver-86adc7446401

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM