[рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣] рдЪрдХреНрд░ рдХреЗ рдЕрдиреНрдп 19 рднрд╛рдЧреЛрдВ рд╣рдо рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрдВрддреНрд░реЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗ
рд╕рддреНрд░рд╕реНрдЯреИрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ 19 рд▓реЗрдЦреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдЬ рд╣рдо рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рдирдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ - рддрдерд╛рдХрдерд┐рдд "рдХрд╕реНрдЯрдо рддрддреНрд╡"ред рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХрд┐рди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред
рд╕рд┐рдВрд╣рд╛рд╡рд▓реЛрдХрди
рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рд╣рдордиреЗ
рд╢реИрдбреЛ рдбреЛрдо рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рддрдХрдиреАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИ рдЬреЛ рдПрдХ рдмрдбрд╝реА рдШрдЯрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ - рд╡реЗрдм рдШрдЯрдХред рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рдХреЙрдореНрдкреИрдХреНрдЯ, рдореЙрдбреНрдпреВрд▓рд░ рдФрд░ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рддрддреНрд╡реЛрдВ рдХреЗ рджреНрд╡рд╛рд░рд╛ HTML рдХреА рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдпрд╛ W3C рдорд╛рдирдХ рд╣реИ рдЬреЛ рд╕рднреА рдЕрдЧреНрд░рдгреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИред рд╡рд╣ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрдмрдХрд┐ рдЙрд╕рдХрд╛ рдХрд╛рдо рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рдореЗрдВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ HTML, CSS рдФрд░ JavaScript рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред HTML рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рдкреЗрдЬреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, CSS рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрд╣рд▓реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ HTML рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред
рддрдереНрдп рдХреА рдмрд╛рдд рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдВ рд╣рдо рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рдХрд╕реНрдЯрдо рддрддреНрд╡ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдкреАрдЖрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рд╡рд░реНрдгрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рддрд░реНрдХ рдФрд░ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдЪрдЯреАрдПрдордПрд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдХрдИ рд▓реЛрдЧ рдЫрд╛рдпрд╛ рдбреЛрдо рддрдХрдиреАрдХ рдХреЗ рд╕рд╛рде рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпреЗ рджреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдкреВрд░рдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВред
рдХреБрдЫ рдЪреМрдЦрдЯреЗ (рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдгреАрдп рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдХреЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЛрдгреАрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╛ рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдПрдХ рдорд╛рдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, HTML рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╣рдореЗрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рд╛рдорд╛рдиреНрдп рдЬреЗрдПрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИрдВред рдЖрдзреБрдирд┐рдХ рдврд╛рдВрдЪреЗ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджреЗрддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рджреЛрдиреЛрдВ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдкреАрдЖрдИ
рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ
customElements
рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
define(tagName, constructor, options)
рд╡рд┐рдзрд┐ define(tagName, constructor, options)
рдЖрдкрдХреЛ рдПрдХ рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ (рдмрдирд╛рдиреЗ, рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ define(tagName, constructor, options)
рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рддреАрди рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдирд╛рдо, рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдирд╛рдордХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛, рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ - extends
, рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдХреЗ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредget(tagName)
рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рдпрд╣ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ, рдЕрдиреНрдпрдерд╛ рдпрд╣ undefined
ред рдпрд╣ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдЯреИрдЧред- рдЬрдм
whenDefined(tagName)
рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╣рд▓ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред рдпрджрд┐ рдХреЛрдИ рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рджрд╛ рддреБрд░рдВрдд рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд╛рджрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЯреИрдЧ рдирд╛рдо рдЗрд╕рдХреЗ рдкрд╛рд╕ рдЧрдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдз рдЯреИрдЧ рдирд╛рдо рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЗ рдЯреИрдЧ рдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред
рдХрд╕реНрдЯрдо рдЖрдЗрдЯрдо рдмрдирд╛рдПрдБ
рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдХрд╛рдо рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ: рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдмрдирд╛рдПрдВ рдЬреЛ
HTMLElement
рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЪрдпрдирд┐рдд рдирд╛рдо рдХреЗ рддрд╣рдд рдЗрд╕ рддрддреНрд╡ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:
class MyCustomElement extends HTMLElement { constructor() { super();
рдпрджрд┐ рдЖрдк рд╡рд░реНрддрдорд╛рди рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкреНрд░рджреВрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдирд╛рдо рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
customElements.define('my-custom-element', class extends HTMLElement { constructor() { super();
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡
customElements.define(...)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдВрдЬреАрдХреГрдд рд╣реИ
customElements.define(...)
рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИред
рд╕рдорд╕реНрдпрд╛рдПрдБ рдЬреЛ рдХрд╕реНрдЯрдо рддрддреНрд╡ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ
рдЖрдЗрдП рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕реЗ "div рдЯреИрдЧ рд╕реВрдк" (div рд╕реВрдк) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ рдЦрддреНрдо рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдШрдЯрдирд╛ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдореЗрдВ рдХрдИ
div
рддрддреНрд╡ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╣реИрдВред рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
<div class="top-container"> <div class="middle-container"> <div class="inside-container"> <div class="inside-inside-container"> <div class="are-we-really-doing-this"> <div class="mariana-trench"> тАж </div> </div> </div> </div> </div> </div>
рдРрд╕реЗ HTML- рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣ рдкреГрд╖реНрда рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕рдХрд╛ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ HTML рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдЬрдЯрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдШрдЯрдХ рд╣реИ рдЬреЛ рдирд┐рдореНрди рдЖрдХреГрддрд┐ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдШрдЯрдХ рдЙрдкрд╕реНрдерд┐рддрд┐рдРрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рдВрдкрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдирд┐рдореНрди рдХреЛрдб рдЗрд╕ рдШрдЯрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛:
<div class="primary-toolbar toolbar"> <div class="toolbar"> <div class="toolbar-button"> <div class="toolbar-button-outer-box"> <div class="toolbar-button-inner-box"> <div class="icon"> <div class="icon-undo"> </div> </div> </div> </div> </div> <div class="toolbar-button"> <div class="toolbar-button-outer-box"> <div class="toolbar-button-inner-box"> <div class="icon"> <div class="icon-redo"> </div> </div> </div> </div> </div> <div class="toolbar-button"> <div class="toolbar-button-outer-box"> <div class="toolbar-button-inner-box"> <div class="icon"> <div class="icon-print"> </div> </div> </div> </div> </div> <div class="toolbar-toggle-button toolbar-button"> <div class="toolbar-button-outer-box"> <div class="toolbar-button-inner-box"> <div class="icon"> <div class="icon-paint-format"> </div> </div> </div> </div> </div> </div> </div>
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЗ рдмрдЬрд╛рдп рдШрдЯрдХ рдХреЗ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
<primary-toolbar> <toolbar-group> <toolbar-button class="icon-undo"></toolbar-button> <toolbar-button class="icon-redo"></toolbar-button> <toolbar-button class="icon-print"></toolbar-button> <toolbar-toggle-button class="icon-paint-format"></toolbar-toggle-button> </toolbar-group> </primary-toolbar>
рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реЛрдЧрд╛ рдХрд┐ рджреВрд╕рд░рд╛ рдХреЛрдб рдЯреБрдХрдбрд╝рд╛ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб
div
рдЯреИрдЧ рд╣реИрдВред
рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдЕрдЧрд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рд╣реИред рдХреЛрдб рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рд╕рдорд░реНрдерд┐рдд рднреА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рд╣реА рдирд┐рд░реНрдорд╛рдг рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдорд░реНрдерди рдХреНрд╖рдорддрд╛рдУрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрддреНрд╡ рд╣реИрдВ:
<div class="my-custom-element"> <input type="text" class="email" /> <button class="submit"></button> </div>
рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ, рд╕рд╛рдорд╛рдиреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рд╣реА HTML рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдПрдХ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЬрд╣рд╛рдБ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЙрд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рд╣реА рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд▓рдВрдмреЗ, рдХрдареЛрд░ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЬрд╣рд╛рдБ рдЗрд╕ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:
<my-custom-element></my-custom-element>
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдерд┐рд░ HTML рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИрдВред рд╡реЗ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╣реИрдВред рдЙрдирдХреА рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд╛ рд╕реНрд░реЛрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдРрд╕реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рддрддреНрд╡ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдЙрдирд╕реЗ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рднрд╛рд╡реЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдХреНрд▓рд┐рдХреЛрдВ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдКрдкрд░ рдорд╛рдЙрд╕ рдкреЙрдЗрдВрдЯрд░ рдХреЗ "рд╣реЛрд╡рд░рд┐рдВрдЧ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШрд╕реАрдЯрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣рд╛рдВ рдПрдХ рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ рдХреЛ рдЙрд╕ рддрддреНрд╡ рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП рдЬреЛ рдорд╛рдЙрд╕ рд╕реЗ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рд╣реЛрддрд╛ рд╣реИ:
var myDiv = document.querySelector('.my-custom-element'); myDiv.addEventListener('click', _ => { myDiv.innerHTML = '<b> I have been clicked </b>'; });
рдФрд░ рдпрд╣рд╛рдБ рдЗрд╕ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП HTML рдХреЛрдб рд╣реИ:
<div class="my-custom-element"> I have not been clicked yet. </div>
рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕ рд╕рднреА рддрд░реНрдХ рдХреЛ рддрддреНрд╡ рдореЗрдВ рд╣реА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП - рдиреАрдЪреЗ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ:
class MyCustomElement extends HTMLElement { constructor() { super(); var self = this; self.addEventListener('click', _ => { self.innerHTML = '<b> I have been clicked </b>'; }); } } customElements.define('my-custom-element', MyCustomElement);
рдФрд░ рдпрд╣рд╛рдБ рдкреГрд╖реНрда рдХреЗ HTML рдХреЛрдб рдореЗрдВ рдпрд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
<my-custom-element> I have not been clicked yet </my-custom-element>
рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП JS рдХреЛрдб рдХреА рдЕрдзрд┐рдХ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рддрддреНрд╡ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдШрдЯрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рддрддреНрд╡ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЬрдм рд╡реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреГрд╖реНрда рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╡реЗ рдкреГрд╖реНрда рдХреЗ рдореВрд▓ рдПрдЪрдЯреАрдПрдордПрд▓ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрд╛рдо рд╕рд░рд▓ рд╣реИред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрджрд┐ рд╣рдо рдЗрд╕ рдЦрдВрдб рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдХреЛрдб рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рд╕рд░рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИрдВ рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реЛрддреА рд╣реИрдВред
рдЕрдм рдЬрдм рд╣рдордиреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдореБрджреНрджреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ, рддреЛ рдЖрдЗрдП рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред
рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдмрдирд╛рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рд╡реЗ рд╣реИрдВ:
- рдШрдЯрдХ рдирд╛рдо рдореЗрдВ рдПрдХ рд╣рд╛рдЗрдлрд╝рди (
-
рдкреНрд░рддреАрдХ) рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, HTML рдкрд╛рд░реНрд╕рд░ рдПрдореНрдмреЗрдбреЗрдб рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдирд╛рдореЛрдВ рдХреА рдХреЛрдИ рдЯрдХреНрдХрд░ рдирд╣реАрдВ рд╣реИ (рдЙрди рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛ рдЕрднреА рд╣реИрдВ рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдо >my-custom-element<
, рдФрд░ рдирд╛рдо >myCustomElement<
рдФрд░ <my_custom_element>
рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред - рдПрдХ рд╣реА рдЯреИрдЧ рдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рдирд┐рд╖рд┐рджреНрдз рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ
DOMException
рддреНрд░реБрдЯрд┐ DOMException
рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред - рдХрд╕реНрдЯрдо рдЯреИрдЧ рд╕реНрд╡-рд╕рдорд╛рдкрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред HTML рдкрд╛рд░реНрд╕рд░ рдХреЗрд╡рд▓ рдорд╛рдирдХ рд╕реНрд╡-рд╕рдорд╛рдкрди рдЯреИрдЧ рдХреЗ рд╕реАрдорд┐рдд рд╕реЗрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
<img>
, <link>
, <br>
)ред
рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ
рдЪрд▓реЛ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрддреНрддрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕реА рд░реЛрдЪрдХ рдмрд╛рддреЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреА рд╕рдмрд╕реЗ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рддрддреНрд╡ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рд╕реНрд╡рдпрдВ DOM рддрддреНрд╡ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд╢реНрд░реЛрддрд╛рдУрдВ рдореЗрдВ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП, рдЪрд╛рдЗрд▓реНрдб рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
class MyCustomElement extends HTMLElement {
рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рддрддреНрд╡ рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЙрди рддрддреНрд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдФрд░ рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЗ рдЦреБрдж рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рддрддреНрд╡ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдРрд╕реЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдЬреАрд╡рди рдЪрдХреНрд░ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
constructor
рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм рддрддреНрд╡ рдХреЛ рдмрдирд╛рддреЗ рдпрд╛ "рдЕрдкрдЧреНрд░реЗрдб" рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред рдЕрдХреНрд╕рд░ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рд╕реА рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ, рдПрдХ рд╢реИрдбреЛ рдбреЛрдо рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рдЗрддреНрдпрд╛рджрд┐ред рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ super()
рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредconnectedCallback
рд╡рд┐рдзрд┐ рдХреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рддрддреНрд╡ DOM рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдпрд╣ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ) рдХрд┐рд╕реА рднреА рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдкреГрд╖реНрда рдкрд░ рддрддреНрд╡ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдХреБрдЫ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред- рдЬрдм рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЛ DOM рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ
disconnectedCallback
рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдореБрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЛ рдмрдВрдж рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдХрд╣рд▓рд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВред - рдПрдХ рддрддреНрд╡
attributeChangedCallback
рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рд╣рдЯрд╛рдиреЗ, рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж attributeChangedCallback
рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрддреНрд╡ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬреЛ observedAttributes
рдЧреБрдг рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред adoptedCallback
рдЕрдкрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдм document.adoptNode(...)
adoptedCallback
document.adoptNode(...)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЛрдб рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдордХрд╛рд▓рд┐рдХ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
connectedCallback
рдЧрдП
connectedCallback
рд╡рд┐рдзрд┐ рдХреЛ DOM рдореЗрдВ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдкрддреНрддрд┐ рдкрд░рд╛рд╡рд░реНрддрди
рдПрдореНрдмреЗрдбреЗрдб HTML рддрддреНрд╡реЛрдВ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ: рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рддрд┐рдмрд┐рдВрдмред рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реАрдзреЗ DOM рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣
id
рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ:
myDiv.id = 'new-id';
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди DOM рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдВрдЧреЗ:
<div id="new-id"> ... </div>
рдпрд╣ рддрдВрддреНрд░ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдореЗрдВ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдирдХреЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
class MyCustomElement extends HTMLElement {
рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░
рдХрд╕реНрдЯрдо рддрддреНрд╡ рдПрдкреАрдЖрдИ рдЖрдкрдХреЛ рди рдХреЗрд╡рд▓ рдирдП HTML рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХрд╛ рднреА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдФрд░ рдХрд╕реНрдЯрдо рджреЛрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╕рдордп
extends
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
class MyAwesomeButton extends MyButton {
рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдХреЛ "рдЕрдиреБрдХреВрд▓рд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рдореЗрд╢рд╛ рдореМрдЬреВрджрд╛ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдЙрддреНрддрд░реЛрддреНрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдирдП рддрддреНрд╡реЛрдВ рдореЗрдВ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рддрддреНрд╡реЛрдВ (рдЬреЛ рдЧреБрдг, рдЧреБрдг, рдХрд╛рд░реНрдп) рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдереЗред
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдХрд╕реНрдЯрдо рдмрд┐рд▓реНрдЯ-рдЗрди рддрддреНрд╡ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо 67+ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рд╕рдлрд╛рд░реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдЕрджреНрдпрддрди рдЖрдЗрдЯрдо
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
customElements.define(...)
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрдВрдЬреАрдХрд░рдг рдХреЛ рд╡рд╣ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡ рдкрдВрдЬреАрдХрд░рдг рдХреЛ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рдордп рддрдм рднреА рдЖ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЛрдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рдЖрдЗрдЯрдо рдХрдм рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░
customElements.whenDefined(...)
рд╡рд┐рдзрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрд╕реЗ рддрддреНрд╡ рдЯреИрдЧ рдХрд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрддреНрд╡ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
customElements.whenDefined('my-custom-element').then(_ => { console.log('My custom element is defined'); });
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рджреЗрд░реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЗ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдиреЗрд╕реНрдЯреЗрдб рддрддреНрд╡ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдРрд╕реА рд░реЗрдЦрд╛ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдХрднреА-рдХрднреА рдПрдХ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдмрдЪреНрдЪреЗ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдмрдЪреНрдЪреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдкрдВрдЬреАрдХреГрдд рд╣реИрдВред
рдЫрд╛рдпрд╛ рдбреЛрдо
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд╕реНрдЯрдо рддрддреНрд╡ рдФрд░ рд╢реИрдбреЛ рдбреЛрдо рдкреВрд░рдХ рддрдХрдиреАрдХ рд╣реИрдВред рдкрд╣рд▓рд╛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡реЛрдВ рдореЗрдВ рдЬреЗрдПрд╕ рд▓реЙрдЬрд┐рдХ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЖрдкрдХреЛ рдбреАрдУрдПрдо рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдерд▓рдЧ рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдЙрдирдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╢реИрдбреЛ рдбреЛрдо рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ
рдкрд┐рдЫрд▓реЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╢реИрдбреЛ рдбреЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:
class MyCustomElement extends HTMLElement {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕
this.attachShadow
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддрд╛
this.attachShadow
ред
рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕
рд╣рдорд╛рд░реЗ
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ, рд╣рдордиреЗ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рдмрд╛рдд рдХреА, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдпрд╣рд╛рдБ рд╣рдо рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП,
<template>
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк DOM рдХреЗ рдЦрдВрдб рдХреЛ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреГрд╖реНрда рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
<template id="my-custom-element-template"> <div class="my-custom-element"> <input type="text" class="email" /> <button class="submit"></button> </div> </template>
рдпрд╣рд╛рдВ рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
let myCustomElementTemplate = document.querySelector('#my-custom-element-template'); class MyCustomElement extends HTMLElement {
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдХрд╕реНрдЯрдо рддрддреНрд╡, рдПрдХ рд╢реИрдбреЛ рдбреЛрдо рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╕рдВрдпреЛрдЬрди рд╣реИред рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкреГрдердХ рддрддреНрд╡ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рдЬрд┐рд╕рдореЗрдВ HTML рд╕рдВрд░рдЪрдирд╛ рдХреЛ JS рддрд░реНрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
stylization
рдЕрдм рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рд╕реАрдПрд╕рдПрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ HTML рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╕реНрдкрд░реНрд╢ рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢реИрдбреЛ рдбреЛрдо рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯрд╛рдЗрд▓реНрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдпрд╣ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рд╕реЗ рдХреИрд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рдпрджрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ - рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯрд╛рдЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рддрддреНрд╡реЛрдВ рдХреЛред
my-custom-element { border-radius: 5px; width: 30%; height: 50%;
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рд╢реИрд▓реА рдПрдХ рддрддреНрд╡ рдХреЗ рдЕрдВрджрд░ рдШреЛрд╖рд┐рдд рд╢реИрд▓рд┐рдпреЛрдВ рдкрд░ рдкреВрд░реНрд╡рддрд╛ рд▓реЗрддреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреА рд╣реИред
рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ, рдЬрдм рдХреЛрдИ рдкреГрд╖реНрда рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рдЖрдк рдЙрд╕ рдкрд░ рдЧреИрд░-рд╢реИрд▓реА рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕реЗ FOUC - рдлреНрд▓реИрд╢ рдСрдл рдЕрдирд╕реНрдЯрд╛рдЗрд▓ рдХрдВрдЯреЗрдВрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЕрдкрдВрдЬреАрдХреГрдд рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдХреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рджреГрд╢реНрдп рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЗрд╕ рдШрдЯрдирд╛ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
:defined
ред рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
my-button:not(:defined) { height: 20px; width: 50px; opacity: 0; }
рдЕрдЬреНрдЮрд╛рдд рддрддреНрд╡ рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рддрддреНрд╡
HTML рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрд╣реБрдд рд▓рдЪреАрд▓рд╛ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдЯреИрдЧ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░, рдпрджрд┐ рдЯреИрдЧ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛
HTMLUnknownElement
рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
var element = document.createElement('thisElementIsUnknown'); if (element instanceof HTMLUnknownElement) { console.log('The selected element is unknown'); }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдРрд╕реА рдпреЛрдЬрдирд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред , ? , ,
HTMLElement
.
var element = document.createElement('this-element-is-undefined'); if (element instanceof HTMLElement) { console.log('The selected element is undefined but not unknown'); }
HTMLElement
HTMLUnknownElement
, , , , - . , , , .
div
. .
Chrome 36+. API Custom Components v0, , , , . API, , тАФ
. API Custom Elements v1 Chrome 54+ Safari 10.1+ ( ). Mozilla v50, , . , Microsoft Edge API. , , webkit. , , , тАФ IE 11.
, , ,
customElements
window
:
const supportsCustomElements = 'customElements' in window; if (supportsCustomElements) {
:
function loadScript(src) { return new Promise(function(resolve, reject) { const script = document.createElement('script'); script.src = src; script.onload = resolve; script.onerror = reject; document.head.appendChild(script); }); }
рдкрд░рд┐рдгрд╛рдо
, :
- HTML- JavaScript-, , CSS-.
- HTML- ( , ).
- . , тАФ JavaScript, HTML, CSS, , , .
- - (Shadow DOM, , , ).
- , .
- , .
,
Custom Elements v1 , , , , , .
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! ?
