рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡реЗрдм-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рдкреЗрдЬ рдкрд░ рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдШрдЯрдХ рдХреЛ рдЖрдкрдХреЛ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ / рдкрддрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдП, рдПрдХ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдкреЗрдбрд╝ рдореЗрдВ рдирдП рдиреЛрдб рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЯреНрд░реАрд╡реНрдпреВ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдмреЗрд╣рддрд░ - рдЖрдзреБрдирд┐рдХ (IE9 +) рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ" рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИрдВ, рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╡реЗрдм тАЛтАЛрдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рднреАрддрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдПрдХ рдЕрдиреНрдп рдмрд┐рдВрджреБ рд╡рд╣ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ ASP.NET MVC рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ рдХрд┐ рдШрдЯрдХ рдХреЛ рдПрдХ NuGet рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ ASP.NET MVC рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИред
рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдореМрдЬреВрджрд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдПрдХ рдФрд░ рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЗрд░рд╛ рдЕрдкрдирд╛,
рд▓рд╛рдареА рдФрд░ рдЧреЗрдЯрд╡реЗ рдХреЗ рд╕рд╛рде ред
рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЖрдк рддрддреНрд╡реЛрдВ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЫрд╣ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдШрдЯрдХ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
- jsTree рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж jsTree рдкрд░ habrahabr рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдбрд╛рдпрдирд╛рдЯреНрд░реА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
- jqTree рдпрд╣ рд╕рдмрд╕реЗ рд╕реБрдЦрдж рдЫрд╛рдк рдмрдирд╛рддрд╛ рд╣реИред рд╢рд╛рдпрдж рдЕрдЪреНрдЫреЗ рдбрд┐рдЬрд╛рдЗрди рдФрд░ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдХрд╛рд░рдгред
- jQuery рдЯреНрд░реА рд╡реНрдпреВ рдкреНрд▓рдЧрдЗрди ред рд▓реЗрдЦрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдм рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ рдФрд░ jqTree рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддреА рд╣реИред
- Dynatree ред
- dhtmlxTree
- dTree
рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖ред
- рдкреБрд░рд╛рдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдУрд╡рд░рд╣реЗрдб рд▓рд╛рдЧрдд рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
- рдкрд╣рд▓реЗ рдЪрд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jquery рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкрд╛рдВрдЪрд╡рд╛рдВ рдЕрдкрдиреЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдЖрддреНрдордирд┐рд░реНрднрд░ рд╣реИред
- рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдкреНрд░рд╛рдЪреАрди "рдбрд╛рдпрдирд╛рд╕реЛрд░" (2003) рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
- рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЪрд╛рд░ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╣реИред рдЗрд╕реА рд╕рдордп, GitHub рдкрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рддреАрди рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдбрд╛рдпрдирд╛рдЯреНрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдЧреВрдЧрд▓ рдХреЛрдб рдкрд░ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдбрд╛рдпрдирд╛рдЯреНрд░реА рдлреИрдВрдХреАрдЯреНрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧрд┐рдЯрд╣рдм рдкрд░ рд╕реНрдерд┐рдд рд╣реИ ред
- рдХрд┐рд╕реА рднреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдиреВрдЧреЗрдЯ рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдХрд╛ рд╡рдЬрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдП рдмрд┐рдирд╛ ASP.NET MVC рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдорд╛рдирдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓, рдЕрдиреБрдХреВрд▓ред рдмрд╛рдЗрдХ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
CSS рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдирд╛рдо рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рд╡рд░реНрдЧ рдирд╛рдо рдкреЗрдбрд╝ рдХреЗ рдХрдВрдЯреЗрдирд░ рддрддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдореЛрдВ рдХреЗ рдЪрдпрдирдХрд░реНрддрд╛ рд╕рдВрджрд░реНрдн- рдмрдЪреНрдЪреЗ рд╣реИрдВ , рдЬрд╣рд╛рдВ рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рд╡рд░реНрдЧ рдХреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдореВрд▓ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕реАрдПрд╕рдПрд╕ рдирд┐рдпрдо рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ рдмрдирд╛рдП рдмрд┐рдирд╛ рдЯреИрдЧ рдЪрдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред LESS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдРрд╕реЗ CSS рдирд┐рдпрдо рд╕реБрдВрджрд░ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдмрди рдЬрд╛рддреЗ рд╣реИрдВред
рдХрдо | рд╕реАрдПрд╕рдПрд╕ |
---|
.resnyanskiy-tree > ul.container { border: 1px dotted gray; font-family: Tahoma; font-size: 10pt; padding: 1px; li { list-style-type: none; background-image: url(images/vline.png); background-repeat: repeat-y; ul { padding-left: 16px; } span { span { height: 16px; } } ... }
| .resnyanskiy-tree > ul.container { border: 1px dotted gray; font-family: Tahoma; font-size: 10pt; padding: 1px; } .resnyanskiy-tree > ul.container li { list-style-type: none; background-image: url(images/vline.png); background-repeat: repeat-y; } .resnyanskiy-tree > ul.container li ul { padding-left: 16px; } .resnyanskiy-tree > ul.container li span span { height: 16px; } ... |
рдореБрдЦреНрдп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рд╕
Tree
рдореЗрдВ рддреАрди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕рджрд╕реНрдп рд╣реЛрддреЗ рд╣реИрдВред
updateNode(...)
рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдиреЛрдб рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИредonBranchExpand
рдФрд░ onNodeClick
рд╕рдВрдЧрдд рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИрдВрдбрд▓рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рджреЛ рдирд┐рдЬреА рддрд░реАрдХреЗ
renderNodeItemsTo(...)
рдХрд░рддреЗ рд╣реИрдВ
renderNodeItemsTo(...)
рдФрд░
toggleNodeItemsVisible(...)
рдореВрд▓ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред DOM рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ / рд╣рдЯрд╛рдХрд░ рдкреЗрдбрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рджреГрд╢реНрдпрддрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (
Element.removeChild(...)
-
jsperf рдХреЛ
рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
toggleNodeItemsVisible(...)
рд╡рд┐рдзрд┐
false
рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЯреНрд░реА рдиреЛрдб (JS рдСрдмреНрдЬреЗрдХреНрдЯ) рдореЗрдВ рдХреЛрдИ рддрддреНрд╡ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж,
onBranchExpand
рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рд╢рд░реНрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд▓рдЧрддреА рд╣реИ:
if(!this.toggleNodeItemsVisible(node) && (this.onBranchExpand instanceof Function)) { this.onBranchExpand(nodeId); }
рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХреЗ рдмреАрдЪ, рдПрдХ рдШрдЯрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ + рд▓реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╢реЛрдзрди рдХрд░рддрд╛ рд╣реИред
GitHub -
github.com/resnyanskiy/js.treeрдиреБрдЧреЗрдЯ -
nuget.org/packages/resnyanskiy.js.tree