DOM MutationObserver - рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рд░реЗ рдмрд┐рдирд╛ DOM рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рдПрдХ рд╕рдордп рдореЗрдВ DOM рдореНрдпреВрдЯреЗрд╢рди рдЗрд╡реЗрдВрдЯ рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧ рд░рд╣рд╛ рдерд╛ - рд╡реЗрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЕрдзрд┐рдХ рдЧрддрд┐рд╢реАрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде DOM рдХреЛ рд╕реБрдирдиреЗ рдФрд░ рдЙрдирдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХрд╛ рдЖрдирдВрдж рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ DOM рдореНрдпреВрдЯреЗрд╢рди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рдХрд┐ рдПрдХ рд╕рд╛рд▓ рдмрд╛рдж рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ "рдЕрдкреНрд░рдЪрд▓рд┐рдд" рдХрд╛ рджрд░реНрдЬрд╛ рдорд┐рд▓рд╛ред

рд▓реЗрдХрд┐рди DOM рдореНрдпреВрдЯреЗрд╢рди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рдкреАрдЫреЗ рдмрд╣реБрдд рд╡рд┐рдЪрд╛рд░ рдЖрдХрд░реНрд╖рдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рд┐рддрдВрдмрд░ 2011 рдореЗрдВ Google рдФрд░ рдореЛрдЬрд╝рд┐рд▓рд╛ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдиреЗ DOM MutationObserver рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдпрд╣ рдирдпрд╛ DOM-API рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ: Firefox 14, Chrome 18, IE 11, Safari 6 (рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ - caniuse.com/mutationobserver )

рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, MutationObserver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

//   var target = document.querySelector('#some-id'); //    var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { console.log(mutation.type); }); }); //   var config = { attributes: true, childList: true, characterData: true } //       observer.observe(target, config); //     observer.disconnect(); 

рд╡рд┐рд░рд╛рд╕рдд рдбреЛрдо рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдШрдЯрдирд╛рдУрдВ рдкрд░ рдирдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рд▓рд╛рдн рдЗрд╕рдХреА рджрдХреНрд╖рддрд╛ рд╣реИред DOM рдиреЛрдб рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╕рдордп, рдЬрдм рддрдХ DOM рдкрд░рд┐рд╡рд░реНрддрди рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗ, рддрдм рддрдХ рдЖрдкрдХрд╛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЬрдм рдХреЙрд▓рдмреИрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ DOM рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдВрддрд┐рдо рд╕реВрдЪреА рдЙрд╕реЗ рднреЗрдЬреА рдЬрд╛рдПрдЧреА, рдЬрд┐рд╕рдХреЗ рдЪрд▓рдиреЗ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрднрд╡ рд╣реЛрдЧреАред

рдпрд╣ рднреА рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рд╣рдо рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХреЗрдВред рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░реЗрдХреНрд╖рдХ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХреНрд░рдордмрджреНрдз рд╕реВрдЪреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣рд╛ рд╣реИ:

 <!DOCTYPE html> <ol contenteditable oninput=""> <li>Press enter</li> </ol> <script> var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; var list = document.querySelector('ol'); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (mutation.type === 'childList') { var list_values = [].slice.call(list.children) .map( function(node) { return node.innerHTML; }) .filter( function(s) { if (s === '<br>') { return false; } else { return true; } }); console.log(list_values); } }); }); observer.observe(list, { attributes: true, childList: true, characterData: true }); </script> 

рддрд╛рдХрд┐ рдЖрдк рдХреЛрдб рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХреЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ jsbin рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛:

jsbin.com/ivamoh/53/edit

рдпрджрд┐ рдЖрдк рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдиреЗ рд╕рдВрднрд╡рддрдГ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ: рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕реВрдЪреА рдХреЗ рдХрд┐рд╕реА рднреА рддрддреНрд╡ рдкрд░ "рджрд░реНрдЬ рдХрд░реЗрдВ" рджрдмрд╛рддреЗ рд╣реИрдВ - рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдиреЗрддреГрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ DOM рдиреЛрдб рдЬреЛрдбрд╝реЗрдВ рдпрд╛ рдирд┐рдХрд╛рд▓реЗрдВред рдпрд╣ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ, рдЬреИрд╕реЗ рдХрд┐рд╕реНрдЯреНрд░реЛрдХреНрд╕, рдпрд╛ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИред MutationObservers рдЗрди рд╕рднреА рддрдХрдиреАрдХреЛрдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣рд╛рдВ, рдЯреНрд░рд┐рдЧрд░ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм DOM рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ JS рджреНрд╡рд╛рд░рд╛ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЧрдИ рдШрдЯрдирд╛рдУрдВ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред

рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд░реЗрдВ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЕрдЪрд╛рдирдХ рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рд╡реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ MutationObservers рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдкреАрдЖрдИ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ рдХрд┐ рдХреБрдЫ рдирдИ, рдпрд╛ рдХреБрдЫ рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИрдВред рдпрд╣ рддрдХрдиреАрдХ рддрдм рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдРрд╕реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ DOM рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ (рдЬреИрд╕реЗ рдХрд┐ setTimeout рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдмреИрд╕рд╛рдЦреА) рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЦреИрд░, рдЖрдЦрд┐рд░реА рдЪреАрдЬ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред

рд╕рдВрд╕рд╛рдзрди:


рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рд╕рд╛рдордЧреНрд░реА рдПрдХ рд╡рд░реНрд╖ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдиреА рд╣реИ, рд▓реЗрдХрд┐рди MutationObserver рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реВрд╕реА рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рдХрдо рд╣реИ - рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In202366/


All Articles