рд╡реЗрдм рдШрдЯрдХ - рд╡реЗрдм рдХрд╛ рднрд╡рд┐рд╖реНрдп

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

- рд╕реИрдо рд╕реНрдЯреАрдлреЗрдВрд╕рди, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ред рдЬреЗрдПрд╕, рдпреВ рдЖрд░ рдиреЙрдЯ рдпреЛрд░ рдХреЛрдб

рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд╕рд╛рдордВрдЬрд╕реНрдпрдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВред рдирдП рдПрдкреАрдЖрдИ рдкрд░ рдирд┐рд░реНрдгрдп рдУрдкрдирд╕реЛрд░реНрд╕ рд╕рдореБрджрд╛рдпреЛрдВ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд░реБрдЭрд╛рдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ prototyp.js рдиреЗ Array.prototype.forEach() , map() , рдЖрджрд┐ рдХреЗ рдЙрджреНрднрд╡ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛, HTMLElement.prototype.querySelector() рдФрд░ querySelectorAll() рдкрд░ jquery рдкреНрд░реЗрд░рд┐рдд рдбреЗрд╡рд▓рдкрд░реНрд╕ред

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

рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдорд╛рдирдХреЛрдВ рдХрд╛ рдПрдХ рдбреНрд░рд╛рдлреНрдЯ рд╕реЗрдЯ рд╣реИред рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ Google рд╕реЗ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрджреЛрдиреНрдирдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкрд╣рд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЛрдЬрд╝рд┐рд▓рд╛ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдереАред рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯред рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, Microsoft рдмрд┐рд▓реНрдХреБрд▓ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред рд╕рдореБрджрд╛рдп рдореЗрдВ рд░рд╛рдп рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рд╣реИрдВ (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рд▓реЗрдЦреЛрдВ рдЖрджрд┐ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП)ред

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рджреЗрдирд╛ рд╣реИред рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдЯреБрдХрдбрд╝реЗ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдПрдореНрдмреЗрдбреЗрдб рд╣реИрдВред HTML рдФрд░ JS API рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

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

рд╡реЗрдм рдШрдЯрдХ рдорд╛рдирдХ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ:


рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯ рдореЗрдВ рдЕрдзрд┐рдХ рднрд╛рдЧ рдФрд░ рдЫреЛрдЯреЗ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ рдЕрднреА рднреА рдХреБрдЫ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдЕрднреА рддрдХ рдХреБрдЫ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВред

рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕


рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕рд░рд▓ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдорд╛рдирдХ рдореЗрдВ рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдЪреАрдЬрд╝ рдХреЗ рдЕрднреНрдпрд╕реНрдд рд╣реИрдВред

рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, DOM рдХреЗ рддрд╛рд░ рдпрд╛ рдЯреБрдХрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╡реЗрдм рдШрдЯрдХреЛрдВ рдореЗрдВ, рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ DOM рдХреЗ рдЯреБрдХрдбрд╝реЗ рд╣реИрдВред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддрдм рддрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рд╣рдо рдЗрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреЗрд╕реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЪрд┐рддреНрд░реЛрдВ, рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдРрд╕рд╛ рдЯреБрдХрдбрд╝рд╛ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

  <template id="tmpl-user"> <h2 class="name"> </h2> <img src="photo.jpg"> </template> 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ <template> рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛ред рдЖрдк рдЗрд╕реЗ js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  var tmpl = document.querySelector('#tmpl-user'); //  <template> var content = tmpl.content; var imported; //    : content.querySelector('.name').innerText = ''; //        , //  document.importNode() // //    ``  , //       `photo.jpg` imported = document.importNode(content); //     : document.body.appendChild(imported); 


рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдЭрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░реЛрдо рдХреИрдирд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдПрдБ
  • HTML рдЖрдпрд╛рдд рд╕рдХреНрд╖рдо рдХрд░реЗрдВ
  • рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ


рдХрд┐рд╕ рд▓рд┐рдП?


рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:

  1. рдкреГрд╖реНрда рдкрд░ рдПрдХ рдЫрд┐рдкреЗ рд╣реБрдП рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬреЛрдбрд╝реЗрдВред рдЬрдм рдЙрд╕рдХреА рдЬрд░реВрд░рдд рд╣реЛрдЧреА
    рдХреЙрдкреА рдФрд░ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдбреЗрдЯрд╛:

      <div hidden data-template="my-template"> <p>Template Content</p> <img></img> </div> 

    рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛрдб рдХреЛ "рдирд┐рд╖реНрдкрд╛рджрд┐рдд" рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдпрд╛рдиреА рдЪрд┐рддреНрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЖрджрд┐ред

  2. рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (AJAX рдпрд╛ <script type="x-template"> рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ)ред

      <sctipt type="x-template" data-template="my-template"> <p>Template Content</p> <img src="{{ image }}"></img> </script> 

    рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ XSS рдХреЛ рдЦрддрд░рд╛ рд╣реИ, рдмрдЪрдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдзреНрдпрд╛рди рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

  3. рд╣реЛрдЧрди.рдЬреИрд╕ рдЬреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдЯреЗрдореНрдкрд▓реЗрдЯ рднреА рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдкрд╛рд╕ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рд╕рдорд╛рди рджреЛрд╖ рд╣реИред


<template> рдореЗрдВ рдпреЗ рджреЛрд╖ рдирд╣реАрдВ рд╣реИрдВред рд╣рдо DOM рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЬрдм рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╣рдорд╛рд░реЗ рдКрдкрд░ рд╣реИред

рдЫрд╛рдпрд╛ рдбреЛрдо


Encapsulationред рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдпрд╛рдж рдЖрддреА рд╣реИред рд╢реИрдбреЛ рдбреЛрдо рдХреНрдпрд╛ рд╣реИ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдЬрдм рд╣рдо html5 рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ <audio> рддрддреНрд╡ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  <audio controls src="kings-speech.wav"></audio> 


рд▓реЗрдХрд┐рди рдкреЗрдЬ рдкрд░ рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЕ рдд рддрддреНрд╡

рд╣рдо рдмрд╣реБрдд рд╕рд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдг, рдкреНрд░рдЧрддрд┐ рдмрд╛рд░, рдСрдбрд┐рдпреЛ рд▓рдВрдмрд╛рдИ рд╕рдВрдХреЗрддрдХ рджреЗрдЦрддреЗ рд╣реИрдВред рдпреЗ рддрддреНрд╡ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ? рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╣реИ рдХрд┐ рд╡реЗ рддрддреНрд╡ рдХреЗ рд╢реИрдбреЛ рдЯреНрд░реА рдореЗрдВ рд╣реИрдВред рд╣рдо рдЪрд╛рд╣рдХрд░ рднреА рдЙрдиреНрд╣реЗрдВ DevTools рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

Chrome рдХреЗ рд▓рд┐рдП DevTools рдореЗрдВ рд╢реИрдбреЛ рдбреЛрдо рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, DevTools рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдЯреИрдм, рдПрд▓рд┐рдореЗрдВрдЯреНрд╕ рд╕реЗрдХреНрд╢рди, Show Shadow DOM рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред

DevTools рдореЗрдВ рд╢реИрдбреЛ рдбреЛрдо <audio> рдХреА рд╕рд╛рдордЧреНрд░реА:

devtools рд╢реИрдбреЛ рдбреЛрдо

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдЫрд╛рдпрд╛ рдбреЛрдо рд╕рд┐рджреНрдзрд╛рдВрдд

рд╢реИрдбреЛ рдЯреНрд░реА рдПрдХ рд╕рдмрдЯреНрд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореЗрдВ рдПрдХ рдПрд▓рд┐рдореЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рддрддреНрд╡ рдХреЛ рд╢реИрдбреЛ рд╣реЛрд╕реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЫрд╛рдпрд╛ рдкреЗрдбрд╝ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддрддреНрд╡ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ <audio> рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ; рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЫрд╛рдпрд╛ рдкреЗрдбрд╝ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИред

рд╢реИрдбреЛ рдбреЛрдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ <style> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реИрд▓рд┐рдпрд╛рдБ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдореВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХрд╛ рднреА рдЕрд╡рд╕рд░ рд╣реИред рдЙрд╕ рдкрд░ рдФрд░ рдмрд╛рдж рдореЗрдВред

рдПрдХ рдЫрд╛рдпрд╛рджрд╛рд░ рдкреЗрдбрд╝ рд▓рдЧрд╛рдУ

рд╢реИрдбреЛ рдбреЛрдо рдПрдкреАрдЖрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреА рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░реЗрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <div class="shadow-host">     . </div> <script> var shadowHost = document.querySelector('.shadow-host'); var shadowRoot = shadowHost.createShadowRoot(); shadowRoot.innerText = '   .' </script> 

рдкрд░рд┐рдгрд╛рдо:

рдХрд╕реНрдЯрдо рдЫрд╛рдпрд╛ рдбреЛрдо

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдЕрдиреБрдорд╛рди, <content>


рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рдПрдХ рдЫрд╛рдпрд╛ рдкреЗрдбрд╝ рдореЗрдВ рдореЗрдЬрдмрд╛рди рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдореЗрдВ <content> ред

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ <content> рд╣реЛрд╕реНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЫрд╛рдпрд╛ рдЯреНрд░реА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореЗрдЬрдмрд╛рди рдХреЗ рд╡рдВрд╢рдЬ рдЕрдкрдиреЗ рд╕реНрдерд╛рди рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╢реИрд▓рд┐рдпрд╛рдБ (рдФрд░ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдирд╣реАрдВ) рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИрдВред <content> рджреБрдирд┐рдпрд╛ рдХреЗ рдмреАрдЪ рдПрдХ рддрд░рд╣ рдХреА рдЦрд┐рдбрд╝рдХреА рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <template id="content-tag"> <p>   <strong>shadow tree</strong>. </p> <p>    <strong>shadow host</strong>: </p> <content></content> </template> <div class="shadow-host"> <h1 class="name"></h1> <img src="varlam.png"> <p class="description"> </p> </div> <script> var host = document.querySelector('.shadow-host'), template = document.querySelector('#content-tag'), shadow = host.createShadowRoot(); shadow.appendChild(template.content); </script> 

рдкрд░рд┐рдгрд╛рдо:

рд╕рд╛рдордЧреНрд░реА рдбреЗрдореЛ

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рд╢реИрдбреЛ рдбреЛрдо рдореЗрдВ рд╢реИрд▓рд┐рдпрд╛рдБ


рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╢реИрдбреЛ рдбреЛрдо рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдПрдХ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╢реИрд▓рд┐рдпрд╛рдБ рдЗрд╕ рд╡реГрдХреНрд╖ рдХреЗ рдЕрдВрджрд░ рд╣реА рд╢рдХреНрддрд┐ рд╣реЛрддреА рд╣реИрдВред

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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <template id="color-green"> <style> div { background-color: green; } </style> <div></div> </template> <div class="shadow-host"></div> <script> var host = document.querySelector('.shadow-host'), template = document.querySelector('#color-green'), shadow = host.createShadowRoot(); shadow.appendChild(template.content); </script> 

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреЗ рдЕрдВрджрд░ рдХреЗрд╡рд▓ `<div>` рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред
рдРрд╕реА рд╢реИрд▓рд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рдореБрдЦреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо:

рдЧреНрд░реАрди

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдирд┐рд╣рд┐рдд рд╢реИрд▓реА


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╢реИрд▓рд┐рдпрд╛рдБ рдЬреИрд╕реЗ color , font-size рдФрд░ рдЕрдиреНрдп рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕рд╕реЗ shadowRoot.resetStyleInheritance = true рдпрджрд┐ рд╣рдо shadowRoot.resetStyleInheritance = true рд╕реЗрдЯ shadowRoot.resetStyleInheritance = true ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <template id="reset"> <p>    .</p> <content></content> </template> <div class="shadow-host"> <p>Host Content</p> </div> <script> var host = document.querySelector('.shadow-host'), template = document.querySelector('#reset'), shadow = host.createShadowRoot(); shadow.resetStyleInheritance = true; shadow.appendChild(template.content); </script> 

рдкрд░рд┐рдгрд╛рдо:

рд╡рд╛рд░рд┐рд╕ рд╢реИрд▓реА

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдХреЙрдкреАрд░рд╛рдЗрдЯ рд╢реИрд▓рд┐рдпреЛрдВ


рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, applyAuthorStyles рдЧреБрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <template id="no-author-st"> <div class="border">div.border</div> </template> <style> /*    */ .border { border: 3px dashed red; } </style> <div class="shadow-host"></div> <script> var host = document.querySelector('.shadow-host'), template = document.querySelector('#no-author-st'), shadow = host.createShadowRoot(); shadow.applyAuthorStyles = false; //  - shadow.appendChild(template.content); </script> 


applyAuthorStyles рдХрд╛ рдорд╛рди рдмрджрд▓рдиреЗ рдкрд░, рд╣рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИ:

applyAuthorStyles = false

рд▓реЗрдЦрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ

applyAuthorStyles = true

рд▓реЗрдЦрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд╛рдБ

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ, applyAuthorStyles = false

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ, рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЖрд░реНрдЯрдСрд░реНрдЯрд▓реНрд╕ = рд╕рдЪ

^ рдФрд░ ^ ^ рдЪрдпрдирдХрд░реНрддрд╛


рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЕрднреА рднреА рдЫрд╛рдпрд╛ рдХреЗ рдкреЗрдбрд╝ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рд╕реЗ рдЗрд╕рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╣рдереМрдбрд╝рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╕реНрд▓реЗрдЬрд╣реИрдорд░ред

div ^ p рдЪрдпрдирдХрд░реНрддрд╛ div p рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЫрд╛рдпрд╛ рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред

div ^^ p рдЪрдпрдирдХрд░реНрддрд╛ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЫрд╛рдпрд╛ рд╕реАрдорд╛рдУрдВ рдХреА рдХрд┐рд╕реА рднреА рд░рд╛рд╢рд┐ рдХреЛ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдХрд░рддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <template id="hat"> <p class="shadow-p">   . </p> </template> <style> /*    */ .shadow-host ^ p.shadow-p { color: red; } </style> <div class="shadow-host"></div> <script> var host = document.querySelector('.shadow-host'), template = document.querySelector('#hat'), shadow = host.createShadowRoot(); shadow.appendChild(template.content); </script> 

рдкрд░рд┐рдгрд╛рдо:

рдЯреЛрдкреА рдореЗрдВ рдмрд┐рд▓реНрд▓реА

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдореБрдЭреЗ рд╢реИрдбреЛ рдбреЛрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рд╢реИрдбреЛ рдбреЛрдо рдЖрдкрдХреЛ HTML рддрддреНрд╡реЛрдВ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд╛рд╣рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рд╕рдВрднрд╡ рдЙрдкрдпреЛрдЧ iframe рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдмрд╛рдж рд╡рд╛рд▓рд╛ рднреА рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИред рдПрдХ рдмрд╛рд╣рд░реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЧрд▓ рддрд░реАрдХреЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реАрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдмрд╛рд╣рд░реА рджреГрд╢реНрдп рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

iframe рд╡рд┐рдкрд░реАрдд, рд╢реИрдбреЛ рдбреЛрдо рдЖрдкрдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдЫрд╛рдпрд╛ рд╡реГрдХреНрд╖ рдХреБрдЫ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИ, рдЕрдЧрд░ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЗрд╕реЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЙрдард╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╕реНрдЯрдо рддрддреНрд╡


рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ HTML рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдПрдкреАрдЖрдИ рдкрд░рд┐рдкрдХреНрд╡ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ
рдХреЛрдгреАрдп ред рд╢реИрдбреЛ рдбреЛрдо рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдХрд╕реНрдЯрдо рддрддреНрд╡ <audio> , <video> рдпрд╛ <input type="date"> рдЬреИрд╕реЗ рдкреВрд░реНрдг-рд╡рд┐рдЬреЗрдЯ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЙрдирдХреЗ рдирд╛рдо рдореЗрдВ рдПрдХ рд╣рд╛рдЗрдлрд╝рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╡реЗ HTMLElement рд╡рд╛рд░рд┐рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ <my-super-element> рдЬреИрд╕реЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ HTMLElement рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред <mysuperelement> рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо HTMLUnknownElement рд╣реЛрдЧрд╛ред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <dog></dog> <x-dog></x-dog> <dl> <dt>dog type</dt> <dd id="dog-type"></dd> <dt>x-dog type</dt> <dd id="x-dog-type"></dd> </dl> <script> var dog = document.querySelector('dog'), dogType = document.querySelector('#dog-type'), xDog = document.querySelector('x-dog'), xDogType = document.querySelector('#x-dog-type'); dogType.innerText = Object.prototype.toString.apply(dog); xDogType.innerText = Object.prototype.toString.apply(xDog); </script> 

рдкрд░рд┐рдгрд╛рдо:

рдПрдХреНрд╕-рдХреБрддреНрддрд╛

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдкреАрдЖрдИ


рд╣рдо рдЕрдкрдиреЗ рддрддреНрд╡ рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕реЗ рдХрд┐ <audio> рддрддреНрд╡ рдХрд╛ play() рд╡рд┐рдзрд┐ред

рддрддреНрд╡ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ 4 рдШрдЯрдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдХреЙрд▓рдмреИрдХ рд▓рдЯрдХрд╛ рд╕рдХрддреЗ рд╣реИрдВ:


рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

  1. рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрддреНрд╡ рдмрдирд╛рдПрдВред

    рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдПрдХ HTMLElement рдпрд╛ рдЙрд╕рдХреЗ рд╡рдВрд╢рдЬ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛,
    рдЬреИрд╕реЗ HTMLButtonElement :

      var myElementProto = Object.create(HTMLElement.prototype, { // API    lifecycle callbacks }); 

  2. DOM.registerElement document.registerElement() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ DOM рдореЗрдВ рдПрдХ рддрддреНрд╡ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ:

      var myElement = document.registerElement('my-element', { prototype: myElementProto }); 


рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <x-cat></x-cat> <div> <strong>Cat's life:</strong> <pre id="cats-life"></pre> </div> <script> var life = document.querySelector('#cats-life'), xCatProto = Object.create(HTMLElement.prototype, { nickName: 'Cake', writable: true }); xCatProto.meow = function () { life.innerText += this.nickName + ': meow\n'; }; xCatProto.createdCallback = function () { life.innerText += 'created\n'; }; xCatProto.attachedCallback = function () { life.innerText += 'attached\n'; }; xCatProto.detachedCallback = function () { life.innerText += 'detached\n'; }; xCatProto.attributeChangedCallback = function (name, oldVal, newVal) { life.innerText += ( 'Attribute ' + name + ' changed from ' + oldVal + ' to ' + newVal + '\n'); }; document.registerElement('x-cat', { prototype: xCatProto }); document.querySelector('x-cat').setAttribute('friend', 'Fiona'); document.querySelector('x-cat').meow(); document.querySelector('x-cat').nickName = 'Caaaaake'; document.querySelector('x-cat').meow(); document.querySelector('x-cat').remove(); </script> 

рдкрд░рд┐рдгрд╛рдо:

рдмрд┐рд▓реНрд▓рд┐рдпреЛрдВ рдЬреАрд╡рди

рдЙрджрд╛рд╣рд░рдг рд▓рд┐рдВрдХ

рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдорд╛рд░реНрдХрдЕрдк рдХреА рдУрд░ рдПрдХ рдХрджрдо рд╣реИред рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рдмрдирд╛рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рд╢рдмреНрджрд╛рд░реНрде рд░реВрдк рд╕реЗ рддрдЯрд╕реНрде <div> рдпрд╛ <ul> рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдЯрд╛рдЗрдкрд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓ <ul> , рдЬрдмрдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдореЙрдбреНрдпреВрд▓рд░, рдкрдардиреАрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред

рд╢реИрдбреЛ рдбреАрдУрдПрдо рдФрд░ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдПрдкреАрдЖрдИ рдФрд░ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯреЗрдб рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн-рд╕реНрд╡рддрдВрддреНрд░ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рддреЗ рд╣реИрдВред

HTML рдЖрдпрд╛рдд


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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <link rel="import" href="widget.html"> <sctipt> var link = document.querySelector('link[rel="import"]'); //         // *import*. var importedContent = link.import; importedContent.querySelector('article'); </sctipt> 


Object.observe ()


рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рдФрд░ рд╡реЗрдм рдШрдЯрдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ) Object.observe() рдкрд░рд┐рд╡рд░реНрддрди рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рд╣реИред

рдпрджрд┐ рдЖрдк рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдзреНрд╡рдЬ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ Chrome рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  var o = {}; Object.observe(o, function (changes) { changes.forEach(function (change) { // change.object     console.log('property:', change.name, 'type:', change.type); }); }); ox = 1 // property: x type: add ox = 2 // property: x type: update delete ox // property: x type: delete 

рдЬрдм o рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЙрд▓рдмреИрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рджреА рдЬрд╛рддреА рд╣реИ
рдЧреБрдг рдЬреЛ рдмрджрд▓ рдЧрдП рд╣реИрдВред

рдЯреЛрдбреЛ рд╡рд┐рдЬреЗрдЯ


рдЗрд╕ рдЬреНрдЮрд╛рди рд╕реЗ рд▓реИрд╕ рдПрдХ рдкреНрд░рд╛рдЪреАрди рдкрд░рдВрдкрд░рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг TODO рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдПрдХ рд▓реЗрдЦ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред

рдПрдХ рдкреГрд╖реНрда рдкрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдПрдХ рдЖрдпрд╛рдд рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ
  <html> <head> <link rel="import" href="todo.html"> </head> <body> <x-todo></x-todo> </body> </html> <script> // JS API : var xTodo = document.querySelector('x-todo'); xTodo.items(); //   xTodo.addItem(taskText); //  xTodo.removeItem(taskIndex); //  </script> 


рдкрд░рд┐рдгрд╛рдо:

рдЯреВрдбреВ рд╡рд┐рдЬреЗрдЯ

рдбреЗрдореЛ рд▓рд┐рдВрдХ

рдирд┐рд╖реНрдХрд░реНрд╖


HTML5 рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде, рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рдирдП рдореАрдбрд┐рдпрд╛ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рд╣реИред <canvas> рдЬреИрд╕реЗ рддрддреНрд╡ рднреА рджрд┐рдЦрд╛рдИ рджрд┐рдПред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реИрдВред рдЗрд╕ рдорд╛рдирдХ рдиреЗ рднреА рддрддреНрд╡ <article> , <header> , рдФрд░ рдЕрдиреНрдп рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдорд╛рд░реНрдХрдЕрдк "рдЕрд░реНрде рдмрдирд╛рдиреЗ" рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реБрдЖ, рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ред

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

рдкреГрд╖реНрда рдХреЛрдб "рдмреНрд▓реЙрдХ", "рдкреИрд░рд╛рдЧреНрд░рд╛рдл" рдФрд░ "рд╕реВрдЪрд┐рдпреЛрдВ" рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦреЗрдЧрд╛ред рд╣рдо "рдореЗрдиреВ", "рд╕рдорд╛рдЪрд╛рд░ рдлрд╝реАрдб", "рдЪреИрдЯ" рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рд╡реЗрдм рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЕрдм рдкреЙрд▓реАрдлрд┐рд▓реНрд╕ рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреЙрд▓рд┐рдорд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдкреВрд░реНрдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ-рд╕реНрддрд░реАрдп рдврд╛рдВрдЪрд╛ рд╣реИ рдЬреЛ рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

╞Т

рд╕рдВрджрд░реНрдн




рдПрд░рд┐рдХ рдмрд┐рдбреЗрд▓рдореИрди , рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛:

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


All Articles