javascript - डीओएम परिवर्तनों का पता लगाने/निगरानी करने की सबसे प्रभावी विधि?




dom mutation-events (4)

आप DOMNodeInserted और DOMNodeRemoved ईवेंट का उपयोग करने का प्रयास कर सकते हैं। Quirksmode के अनुसार, वे IE के उल्लेखनीय अपवाद के साथ, अधिकांश ब्राउज़रों में काम करते हैं ...

http://www.quirksmode.org/dom/events/index.html

मुझे डीओएम में परिवर्तनों का पता लगाने के लिए एक कुशल तंत्र की आवश्यकता है। पसंदीदा रूप से क्रॉस-ब्राउज़र, लेकिन यदि कोई कुशल साधन है जो क्रॉस ब्राउज़र नहीं है, तो मैं इन्हें असफल-सुरक्षित क्रॉस ब्राउज़र विधि के साथ कार्यान्वित कर सकता हूं।

विशेष रूप से, मुझे उन परिवर्तनों का पता लगाने की आवश्यकता है जो किसी पृष्ठ पर पाठ को प्रभावित करेंगे, इसलिए किसी भी नए, हटाए गए या संशोधित तत्व, या आंतरिक पाठ (आंतरिक HTML) में परिवर्तन की आवश्यकता होगी।

मेरे द्वारा किए जा रहे परिवर्तनों पर मेरा नियंत्रण नहीं है (वे तृतीय पक्ष जावास्क्रिप्ट में शामिल हो सकते हैं, आदि), इसलिए इस कोण से संपर्क नहीं किया जा सकता है - मुझे किसी भी तरह से बदलावों के लिए "निगरानी" करने की आवश्यकता है।

वर्तमान में मैंने एक "quick'n'dirty" विधि लागू की है जो अंतराल पर body.innerHTML.length जांच करता है। यह निश्चित रूप से परिवर्तनों का पता नहीं लगाएगा जिसके परिणामस्वरूप समान लंबाई लौटाई जा रही है, लेकिन इस मामले में "पर्याप्त पर्याप्त" है - इस घटना की संभावनाएं बेहद पतली हैं, और इस परियोजना में, परिवर्तन का पता लगाने में असफल होने का नतीजा नहीं होगा खोए गए डेटा में।

body.innerHTML.length साथ समस्या यह है कि यह महंगा है। यह एक तेज ब्राउज़र पर 1 से 5 मिलीसेकंड के बीच ले सकता है, और यह चीजों को बहुत कम कर सकता है - मैं आईफ्रेम की बड़ी संख्या में भी काम कर रहा हूं और यह सब जोड़ता है। मुझे पूरा यकीन है कि ऐसा करने की विस्तारशीलता इसलिए है क्योंकि आंतरिक HTML टेक्स्ट ब्राउज़र द्वारा स्थिर रूप से संग्रहीत नहीं होता है, और जब भी इसे पढ़ा जाता है तो डीओएम से गणना की आवश्यकता होती है।

जिन उत्तरों के बारे में मैं खोज रहा हूं, वे "सटीक" (उदाहरण के लिए घटना) से "पर्याप्त पर्याप्त" से कुछ भी हैं - संभवतया "quick'n'dirty" के रूप में कुछ आंतरिक HTML.length विधि के रूप में कुछ है, लेकिन यह तेज़ी से निष्पादित करता है।

संपादित करें: मुझे यह भी इंगित करना चाहिए कि जब संशोधित किए गए सटीक तत्व का पता लगाने के लिए यह "अच्छा" होगा, तो यह एक पूर्ण आवश्यकता नहीं है - केवल तथ्य यह है कि कोई भी बदलाव पर्याप्त होगा। उम्मीद है कि यह लोगों के जवाबों को बढ़ाता है। मैं उत्परिवर्तन घटनाओं की जांच करने जा रहा हूं, लेकिन मुझे अभी भी आईई समर्थन के लिए फॉलबैक की आवश्यकता है, इसलिए किसी भी बेकार, रचनात्मक, बाहर के वर्ग विचारों का बहुत स्वागत है।


इसे अद्यतित करने के लिए, डीओएम 4 मानक उत्परिवर्तन घटनाओं से दूर है और उन्हें उत्परिवर्तन पर्यवेक्षकों के साथ बदल देता है: https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver



उत्परिवर्तन घटनाएं आप जो खोज रहे हैं उसकी डब्ल्यू 3 सिफारिश है ..

सुनिश्चित नहीं है कि वे चारों ओर समर्थित हैं .. (आईई सबसे अधिक संभावना है कि उन्हें समर्थन नहीं ..)





mutation-observers