рдХреЛрдб рдХреЛ рдкрдардиреАрдп рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП

рдХреЛрдб рдХреЛ рдкрдардиреАрдп рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП


рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣рдо рд╕рднреА рдиреЗ (рдФрд░ рдХреБрдЫ рд▓рд┐рдЦрддреЗ рд╣реИрдВ) рдмреБрд░рд╛ рдХреЛрдб рд▓рд┐рдЦрд╛ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЕрдкрдиреЗ рдХреМрд╢рд▓ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЗрдЦреЛрдВ рдХреЛ рди рдкрдврд╝реЗрдВред


рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрддреНрдкрд╛рджрдХ рдХреЛрдб рд╣реА рдирд╣реАрдВ, рдЕрдЪреНрдЫреЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?


рдЬрдмрдХрд┐ рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдпрд╛ рд╕рд╛рдЗрдЯ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХрд╛ рдХреЛрдб рджрд┐рдЦрддрд╛ рд╣реИ рд╡рд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рди рдХреЗрд╡рд▓ рдорд╢реАрди рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝ рд░рд╣реА рд╣реИ ред


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬрд▓реНрджреА рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЬрдм рд╡рд╣ рд╕рдордп рдЖрддрд╛ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрд╛ рдХреЛрдб рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВред


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


рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред


рднрд╛рдЧ 1: рдмреБрд░реЗ рдХреЛрдб рдХреА рдкрд╣рдЪрд╛рди рдХреИрд╕реЗ рдХрд░реЗрдВ?


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЦрд░рд╛рдм рдХреЛрдб рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рдХреНрдп рдпрд╛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдерд╛ ред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:


TraverseUpUntil рдХреЗ рдмреБрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


TraverseUpUntil рдХреЗ рдмреБрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддрддреНрд╡ рдФрд░ рдПрдХ рд╕рд╢рд░реНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рдХрдЯрддрдо рдкреИрд░реЗрдВрдЯ рдиреЛрдб рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд╢рд░реНрдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред


const traverseUpUntil = (el, f) => { 

рдЗрд╕ рддрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдХреЛрдб рдХреЛ рд╕рд╛рджреЗ рдкрд╛рда рдХреА рддрд░рд╣ рдкрдврд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рддреАрди рд╕рдХрд▓ рджреЛрд╖ рд╣реИрдВред


  • рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╢рдмреНрджреЛрдВ рдХреА рддрд░рд╣ рдирд╣реАрдВ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ ред
  • рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ el рдХреЛ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд╛рдо рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рддрддреНрд╡ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреИрд░рд╛рдореАрдЯрд░ f рдХрд╛ рдирд╛рдо рдХреБрдЫ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: "рдПрд▓ рдкрд╛рд╕ рд╣реЛрдиреЗ рддрдХ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдПрдл", рдЬреЛ рд╢рд╛рдпрдж "рдПрд▓ рдХреЗ рдкрд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рддрдХ рд╕реНрд╡рд┐рдЪ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ el.traverseUpUntil(f) рд░реВрдк рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред

 let p = el.parentNode 

рдпрд╣ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╣реИред рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛, рдЗрд╕ рдмрд╛рд░ рдЪрд░ рдХреЗ рд╕рд╛рдеред рдпрджрд┐ рдХреЛрдИ рдХреЛрдб рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ p рдХреНрдпрд╛ p ред рдпрд╣ el рдкреИрд░рд╛рдореАрдЯрд░ parentNode ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХрд╣реАрдВ рдФрд░ p рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рдХреЛрдИ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ ред


 while (p.parentNode && !f(p)) { 

рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рдЬреЛ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХрдореА рд╣реИ рдХрд┐ !f(p) рдЕрд░реНрде рд╣реИ рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ "f" рдХрд╛ рдЕрд░реНрде рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ !f(p) рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдиреЛрдб рдХрд╛ рдПрдХ рдЪреЗрдХ рд╣реИред рдпрджрд┐ рдпрд╣ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рдЪрдХреНрд░ рдмрд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред


 p = p.parentNode 

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред


 return p 

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдорд╛рдиреНрдп рдЪрд░ рдирд╛рдо рдХреЗ рдХрд╛рд░рдг рдХреНрдпрд╛ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рднрд╛рдЧ 2: рдЖрдЗрдП рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░


TraverseUpUntil рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


TraverseUpUntil рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЙрдирдХреЗ рдХреНрд░рдо рдХреЗ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ: (el, f) => рд╕реЗ (condition, node) => ред
рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ рдХрд┐ "рддрддреНрд╡ (рд░реВрд╕реА рддрддреНрд╡ ) рдХреЗ рдмрдЬрд╛рдп рдореИрдВрдиреЗ" рдиреЛрдб "(рд░реВрд╕реА рдиреЛрдб ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд┐рдпрд╛:


  • рд╣рдо рдиреЛрдбреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .parentNode , рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реБрд╕рдВрдЧрдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
  • "рдиреЛрдб" "рддрддреНрд╡" рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИ, рдФрд░ рдЕрд░реНрде рдЦреЛ рдирд╣реАрдВ рд╣реИ ред

рдлрд┐рд░ рд╣рдо рдЪрд░ рдирд╛рдореЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:


 let parent = node 

рдЕрдкрдиреЗ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЗрд╕рдХреЗ рдирд╛рдо рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд▓рд┐рдП "рдкреА" рдЕрдм "рдорд╛рддрд╛-рдкрд┐рддрд╛" (рд░реВрд╕реА рдорд╛рддрд╛-рдкрд┐рддрд╛ ) рд╣реИред рдЖрдкрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЕрдм рд╣рдо рдореВрд▓ node.parentNode рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдо рдХреЗрд╡рд▓ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред


рд╣рдо рдФрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:


 do { parent = parent.parentNode } while (parent.parentNode && !condition(parent)) 

while рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рдмрдЬрд╛рдп while рдореИрдВрдиреЗ do ... while рдЪреБрдирд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореВрд▓ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред do ... while рдХрд╛ рдЙрдкрдпреЛрдЧ do ... while рднреА рд╕рд╛рджреЗ рдкрд╛рда рдХреА рддрд░рд╣ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред


рдЖрдЗрдП рдкрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ : "рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдореВрд▓ рдиреЛрдб рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рд╕реМрдВрдкреЗрдВ, рдЬрдм рддрдХ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рдкрд╛рд╕ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХрд╛ рдиреЛрдб рд╣реИ, рдФрд░ рд╕реНрдерд┐рддрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реА рдирд╣реАрдВ рд╣реИ ред " рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рдл рд╣реИред


 return parent 

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


рднрд╛рдЧ 3: рдХреЛрдб рд╕рд░рд▓реАрдХрд░рдг


рдЕрдм рдЬрдм рдЖрдкрдиреЗ рдХреЛрдб рдХреЛ рдкрдардиреАрдп рдмрдирд╛ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ parent рдЪрд░ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред


 const traverseUpUntil = (condition, node) => { do { node = node.parentNode } while (node.parentNode && !condition(node)) return node } 

рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ "рдореВрд▓" рдХреЛ "рдиреЛрдб" рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ "рдкреИрд░реЗрдВрдЯ" рдмрдирд╛рдиреЗ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрджрдо рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдФрд░ рд╕реАрдзреЗ рдкрд╛рд╢ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред


рд▓реЗрдХрд┐рди рдЪрд░ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


рд╣рд╛рд▓рд╛рдВрдХрд┐ "рдиреЛрдб" рдЗрд╕ рдЪрд░ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рд╡рд╣рд╛рдБ рдирд╣реАрдВ рд░реБрдХрддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдирд╛рдо рдмрджрд▓реЗрдВред "CurrentNode" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?


 const traverseUpUntil = (condition, currentNode) => { do { currentNode = currentNode.parentNode } while (currentNode.parentNode && !condition(currentNode)) return currentNode } 

рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ! рдЕрдм, рдЬрдм рд╣рдо рд╡рд┐рдзрд┐ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ currentNode рд╣рдореЗрд╢рд╛ рдЙрд╕ рдиреЛрдб рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣рдо "рдХреБрдЫ рджрдпрд╛рд▓реБ" рдиреЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрдм рдореЗрдВ рд╣реИрдВред

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


All Articles