簡體   English   中英

如何在使用jQuery注入HTML后觸發DOMNodeInserted事件

[英]How to trigger the DOMNodeInserted event after injecting HTML with jQuery

在我們的一個項目中,我們使用AJAX將幻燈片加載到我們的網頁中。 加載幻燈片后,我希望jQuery自動在所有新注入的元素上執行插件。

這是我在其他地方找到的代碼,但它沒有做到這一點。 此外,我試圖用.bind函數替換.on函數,但隨后整個站點都死了,JavaScript崩潰了溢出。

function loaded(selector, callback) {
    //trigger after page load.
    jQuery(function () {
        callback(jQuery(selector));
    });
    //trigger after page update eg ajax event or jquery insert.
    jQuery("body").on('DOMNodeInserted', selector, function (e) {
        callback(jQuery(this));
    });
}

我在JSFiddle中重現了這個問題。

A.沃爾夫,

謝謝你的回答解決了我的問題 我已將加載的函數編輯為以下內容:

function loaded(selector, callback) {
    //trigger after page load.
    jQuery(function () {
        callback(jQuery(selector));
    });
    var parentSelector = "* > " + selector;
    //trigger after page update eg ajax event or jquery insert.
    jQuery(document).on('DOMNodeInserted', parentSelector, function (e) {
        callback(jQuery(this).find(selector));
    });
}

此外,我還為想要一個完整工作示例的人分發了一個新的JSFiddle項目。

https://jsfiddle.net/9t8cahqv/

謝謝,

JOP

在容器DIV級別觸發事件,因此您的選擇器不匹配。 你可以改用:

loaded(":has([title])", function(element) {
   element.tooltip();
});
/**/
jQuery(document).on('DOMNodeInserted', selector, function(e) {
   callback(jQuery(this).find('[title]'));
});

-jsFiddle-

另一種方法可能是, 觀察DOM

var observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    if (!mutation.addedNodes) return

    for (var i = 0; i < mutation.addedNodes.length; i++) {
      // do things to your newly added nodes here
      var node = mutation.addedNodes[i]
      if ($(node).hasClass("some class")) {
        $(node).remove()
      }

      //or with id

      if ($(node).attr("id") == "someId") {
        $(node).remove()
      }

      //or any other selector
    }
  })
})

observer.observe(document.body, {
  childList: true,
  subtree: true,
  attributes: false,
  characterData: false
})

要停止觀察,請使用

observer.disconnect();

暫無
暫無

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

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