मुखपृष्ठ » कोडिंग » DOM Node Changes के लिए MutationObserver API का उपयोग कैसे करें

    DOM Node Changes के लिए MutationObserver API का उपयोग कैसे करें

    यहाँ एक परिदृश्य है: रीता, एक पत्रिका लेखक ऑनलाइन के एक लेख का संपादन कर रही है। वह अपने परिवर्तनों को सहेजती है, और संदेश देखती है “बदलाव सुरक्षित किया गया!” बस फिर, वह एक टाइपो नोटिस किया वह याद किया। वह इसे ठीक करती है और क्लिक करने वाली है “बचाना”, जब उसे अपने बॉस से गुस्से में फोन आता है.

    कॉल खत्म होने के बाद, वह स्क्रीन पर वापस जाती है, देखती है “बदलाव सुरक्षित किया गया!” कार्यालय के बाहर उसके कंप्यूटर और तूफान बंद.

    कहानी कहने के लिए मेरी अयोग्यता के अलावा, हमने उस छोटे परिदृश्य से देखा कि किस समस्या ने लगातार संदेश काढ़ा। इसलिए, भविष्य में हम इसे संभव होने से बचने का निर्णय लेते हैं और एक का उपयोग करते हैं जो या तो उपयोगकर्ता को इसे क्लिक करके स्वीकार करने का संकेत देता है - या अपने आप गायब हो जाता है. त्वरित संदेशों के लिए दूसरे का उपयोग करना एक अच्छा विचार है.

    हम पहले से ही जानते हैं कि किसी पृष्ठ से एक तत्व कैसे गायब किया जाए, ताकि कोई समस्या न हो। हमें जो जानना है वह है यह कब दिखाई दिया? तो हम इसे एक प्रशंसनीय समय के बाद गायब कर सकते हैं.

    MutationObserver एपीआई

    कुल मिलाकर, जब एक DOM तत्व (एक संदेश की तरह) div) या कोई अन्य नोड परिवर्तन, हमें यह जानने में सक्षम होना चाहिए। देशी एपीआई की कमी के कारण लंबे समय तक डेवलपर्स को हैक और फ्रेमवर्क पर निर्भर रहना पड़ता था। लेकिन वह बदल गया था.

    अब हमारे पास है MutationObserver (पहले म्यूटेशन इवेंट्स). MutationObserver गुणों और विधियों के एक सेट के साथ एक जावास्क्रिप्ट देशी वस्तु है। यह हमें देता है किसी भी नोड पर परिवर्तन देखें जैसे कि DOM एलिमेंट, डॉक्यूमेंट, टेक्स्ट आदि, म्यूटेशन द्वारा, हमारा मतलब है एक नोड के अलावा या हटाने और नोड की विशेषता और डेटा में परिवर्तन.

    आइए बेहतर समझ के लिए एक उदाहरण देखें। हम पहले एक सेट अप करेंगे जहां एक बटन पर क्लिक करने पर एक संदेश दिखाई देता है, जैसे कि रीटा ने देखा। फिर ठीक उस संदेश बॉक्स में एक उत्परिवर्तन पर्यवेक्षक बनाएं और लिंक करें तथा संदेश छिपाने के लिए ऑटो को लॉजिक कोड करें. सामान्य बुद्धि?

    ध्यान दें: आप किसी बिंदु पर हो सकते हैं या मुझसे पहले ही आपके सिर में पूछ सकते हैं “सिर्फ बटन पर क्लिक करके संदेश को जावास्क्रिप्ट में ही क्यों छिपाएं?” मेरे उदाहरण में, मैं सर्वर के साथ काम नहीं कर रहा हूं, इसलिए निश्चित रूप से क्लाइंट संदेश दिखाने के लिए जिम्मेदार है और इसे आसानी से छिपा भी सकता है। लेकिन रीटा के एडिटिंग टूल की तरह यदि सर्वर वह है जो DOM कंटेंट को बदलने का निर्णय लेता है, तो क्लाइंट केवल अलर्ट रह सकता है और प्रतीक्षा कर सकता है.

    सबसे पहले, हम बटन क्लिक पर संदेश दिखाने के लिए सेटअप बनाते हैं.


    var msg = document.querySelector ('# msg'), SUCCESSMSG = "परिवर्तन सहेजा गया है!" / * बटन जोड़ें क्लिक करें घटना * / दस्तावेज .querySelector ('बटन') .addventventListener ('क्लिक', showMsg); function showMsg () msg.textContent = SUCCESSMSG; msg.style.background = 'teal';  

    एक बार जब हमें प्रारंभिक सेटअप चालू हो जाता है, तो निम्नलिखित कार्य करते हैं;

    • बनाओ MutationObserver उपयोगकर्ता-परिभाषित कॉलबैक फ़ंक्शन के साथ ऑब्जेक्ट (फ़ंक्शन पोस्ट में बाद में परिभाषित किया गया है)। फ़ंक्शन द्वारा देखे गए प्रत्येक म्यूटेशन पर कार्य करेगा MutationObserver.
    • द्वारा देखे जाने वाले प्रकार के उत्परिवर्तन को निर्दिष्ट करने के लिए एक कॉन्फिग ऑब्जेक्ट बनाएं MutationObserver.
    • बाँधो MutationObserver लक्ष्य के लिए, जो 'संदेश' है div हमारे उदाहरण में.
    (function startObservation () var / * 1) एक MutationObserver ऑब्जेक्ट बनाएं * / ऑब्जर्वर = नया MutationObserver (फ़ंक्शन (म्यूटेशन)) mutationObserverCallback (म्यूटेशन);), / * 2) एक config ऑब्जेक्ट बनाएं * / config = childList: सच; / * 3) Glue'em all * / observer.observe (msg, config); ) (); 

    नीचे गुणों की एक सूची दी गई है config विभिन्न प्रकार के उत्परिवर्तन की पहचान करने वाली वस्तु। चूंकि हमारे उदाहरण में हम केवल संदेश पाठ के लिए बनाए गए एक बाल पाठ नोड से निपटते हैं, हमने इसका उपयोग किया है childList संपत्ति.

    म्यूटेशन के प्रकार मनाया

    संपत्ति कब सेट किया गया सच
    childList लक्ष्य के बाल नोड्स का सम्मिलन और निष्कासन मनाया जाता है.
    गुण लक्ष्य की विशेषताओं में परिवर्तन देखा जाता है.
    characterData लक्ष्य के डेटा में परिवर्तन देखे गए हैं.

    अब, उस कॉलबैक फ़ंक्शन पर, जिसे प्रत्येक देखे गए म्यूटेशन पर निष्पादित किया जाता है.

    function mutationObserverCallback (म्यूटेशन) / * पहले म्यूटेशन को पकड़ो * / var म्यूटेशनरकार्ड = म्यूटेशन [0]; / * यदि एक बच्चा नोड जोड़ा गया था, तो 2s * के बाद msg छिपाएं * / (mutationRecord.addedNad [0]! == अपरिभाषित) setTimeout (HideMsg, 2000);  function hideMsg () msg.textContent = "; msg.style.background = 'none'; 

    चूंकि हम केवल एक संदेश जोड़ रहे हैं div, हम केवल उस पर देखे गए पहले म्यूटेशन को पकड़ लेंगे और जांच लेंगे कि क्या टेक्स्ट नोड डाला गया था। अगर हमें एक से अधिक परिवर्तन हो रहे हैं, तो हम बस के माध्यम से लूप कर सकते हैं म्यूटेशन सरणी.

    में हर म्यूटेशन म्यूटेशन सरणी का प्रतिनिधित्व वस्तु द्वारा किया जाता है MutationRecord निम्नलिखित गुणों के साथ.

    के गुण MutationRecord

    संपत्ति रिटर्न
    addedNodes रिक्त सरणी या जोड़ की सरणी.
    उत्तरदायी ठहराने के लिए नाम उस विशेषता का नाम या नाम जो जोड़ा, हटाया या बदला गया हो.
    attributeNamespace उस विशेषता का अशक्त या नाम स्थान जो जोड़ा, हटाया या बदला गया हो.
    nextSibling जोड़ा या हटाए गए नोड का अगला या अगला सिबलिंग.
    OLDVALUE विशेषता या डेटा का अशक्त या पिछला मूल्य बदल गया.
    previousSibling जोड़ा गया या हटाया गया नोड का शून्य या पिछला सहोदर.
    removedNodes खाली सरणी या नोड्स की सरणी जो हटा दी गई है.
    लक्ष्य नोड द्वारा लक्षित MutationObserver
    प्रकार म्यूटेशन का प्रकार.

    और बस। हमें बस अंतिम चरण के लिए कोड को एक साथ रखना है.

    ब्राउज़र का समर्थन

    छवि: मैं उपयोग कर सकता हूँ। 19 जून 2015

    संदर्भ

    • “W3C DOM4 म्यूटेशन ऑब्जर्वर.” W3C। वेब। 19 जून 2015
    • “MutationObserver.” मोज़िला डेवलपर नेटवर्क। वेब। 19 जून 2015.