2013-11-22 10 views
19

कहें कि मेरे पास div#parent और Iऔर remove तत्वों का उपयोग jquery का उपयोग करके किया गया था। div#parent तत्व पर ऐसी घटना कब होती है जब मैं यह पता लगाने में सक्षम हूं?डोम तत्व से तत्व को जोड़ा/हटाया जा सकता है?

उत्तर

18

उपयोग Mutation Observers के रूप में @Qantas ने सुझाव दिया उसके answer

आप उपयोग कर सकते हैं DOMNodeInserted और DOMNodeRemoved

$("div#parent").on('DOMNodeInserted', function(e) { 
    console.log(e.target, ' was inserted'); 
}); 

$("div#parent").on('DOMNodeRemoved', function(e) { 
    console.log(e.target, ' was removed'); 
}); 

MDN Docs

+4

उत्परिवर्तन घटनाओं पदावनत कर रहे हैं, इस सवाल का जवाब नहीं रह सही एक होना चाहिए। उत्परिवर्तन पर्यवेक्षकों को उत्परिवर्तन घटनाओं के प्रतिस्थापन के रूप में डिज़ाइन किया गया था, इसलिए क्वांटास उत्तर सही है। https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events और https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver – Parziphal

3

आप DOMSubtreeModified बाँध चाहिए घटना

$("#parent").bind("DOMSubtreeModified",function(){ 
    console.log('changed'); 
}); 

http://jsfiddle.net/WQeM3/

+0

'DOMSubtreeModified' घटनाओं अनुचित हैं: [मैं उपयोग कर सकते हैं] (https://caniuse.com/#search=DOMSubtreeModified) – Cody

46

DOMNodeInserted और DOMNodeRemoved जैसे उत्परिवर्तन कार्यक्रमों का उपयोग न करें।

इसके बजाय, डीओएम Mutation Observers का उपयोग करें, जो आईई 10 और निचले (Can I use) को छोड़कर सभी आधुनिक ब्राउज़रों में समर्थित हैं। उत्परिवर्तन पर्यवेक्षकों का उद्देश्य उत्परिवर्तन घटनाओं को प्रतिस्थापित करना है (जिन्हें हटा दिया गया है), क्योंकि flaws in its design के कारण उन्हें कम प्रदर्शन पाया गया है।

var x = new MutationObserver(function (e) { 
    if (e[0].removedNodes) console.log(1); 
}); 

x.observe(document.getElementById('parent'), { childList: true }); 
+4

उत्तर के लिए धन्यवाद, लेकिन * उत्परिवर्तन पर्यवेक्षकों * का बुरा व्यवहार है: मैं पर्यवेक्षक को नोड में सेट करना चाहता हूं जो बाद में पेड़ से जुड़ा होगा। मैं माता-पिता को नहीं जानता ('डोमोडोड रीमेड' के साथ मैं कर सकता था। कोई विचार? मैं नोड को स्वयं विनाश सुनना चाहता हूं। – DenisKolodin

+0

@ डेनिस कोलोद्दीन वाह, मैंने इस टिप्पणी को नहीं देखा, क्षमा करें। वंशावली के लिए, इसका उत्तर देना चाहिए [ यह प्रश्न] (https://stackoverflow.com/q/31798816/2074608)। इसका मतलब दस्तावेज़ स्तर पर एक ईवेंट रखना है, लेकिन उत्परिवर्तन घटनाओं में इतना बड़ा प्रदर्शन जुर्माना है, इससे कोई फर्क नहीं पड़ता है। –

संबंधित मुद्दे