рдиреЗрд╕реНрдЯреЗрдб рд╕реЗрдЯреНрд╕ рдореЙрдбрд▓ рдЯреНрд░реА рдЬрдирд░реЗрд╢рди рджреЗрдЦрддреЗ рд╣реИрдВ

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

рдЫрд╡рд┐

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

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ:
рдЖрдИрдбреА - рдкрдВрдХреНрддрд┐ рдЖрдИрдбреА
рд╕реНрддрд░ - рддрддреНрд╡ рд╕реНрддрд░
left_key - рдмрд╛рдпрд╛рдБ рдХреБрдВрдЬреА
right_key - рд╕рд╣реА рдХреБрдВрдЬреА
рдХреИрдкреНрд╢рди рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХрд╛ рдирд╛рдо рд╣реИред
рдЖрдк рдпрд╣рд╛рдВ рдРрд╕реА рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВред
AJAX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдмрд╛рдПрдБ_рдХреА рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреА рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рд╕реВрдЪреА рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
 <ul>, :  <li>,   . ,      <span>,   .     ,     <ul>   ...   ... 

рдЪрд▓реЛ рдПрдХ рдкреЗрдбрд╝ рдкреИрджрд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдмрдЪреНрдЪреЛрдВ рдпрд╛ рдХрд┐рд╕реА рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рд╡реЗ рдЧрд╛рдпрдм рд╣реИрдВред
 var getChilds = function(trgt, arr){ var childs = Array(); var length = arr.length; for (var i = 0; i < length; i++){ var curr = getInts(arr[i]); var under = (curr.level > trgt.level) ; var l_in = (curr.left_key > trgt.left_key); var r_in = (curr.right_key < trgt.right_key); if (under && l_in && r_in) childs.push(arr[i]); } return childs; } 

рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рд╕рд░рдгреА рдХреЗ рджрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдЬрд╛рдВрдЪрдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ: рдпрджрд┐ рдкреНрд░рд╢реНрди рдореЗрдВ рддрддреНрд╡ рдХрд╛ рд╕реНрддрд░ рджрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рд╕реНрддрд░ рд╕реЗ рдХрдо рд╣реИ, рдЬрдмрдХрд┐ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдХреБрдВрдЬрд┐рдпрд╛рдВ рдХреНрд░рдорд╢рдГ рджрд┐рдП рдЧрдП рддрддреНрд╡ рдХреЗ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╣реИрдВ, рддрдм рд╣рдо рдкреНрд░рд╢реНрди рдореЗрдВ рддрддреНрд╡ рдХреЛ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ getInts рдлрд╝рдВрдХреНрд╢рди рд╕реНрддрд░, рдмрд╛рдПрдБ_рдХреА рдУрд░, рдФрд░ рджрд╛рдПрдБ_рдХреА рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддрд╛рд░ рдирд╣реАрдВред
 var getInts = function(arr){ temp = Object(); for (var i in arr){ if (i!='name') temp[i] = parseInt(arr[i]) else temp[i] = arr[i] return temp } 

рдмрдЪреНрдЪреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЙрдирд╕реЗ рдореВрд▓ рд╕рд░рдгреА рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рджреВрд╕рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмреЗрд╣рддрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред
 var cleanDuplicates = function(from, elements){ var length = arr.length; for (var i = 0; i < length; i++){ if ($.inArray(from[i], elements) > -1) delete from[i] } return from; } 

рдпрд╣рд╛рдВ, рдПрд░реЗрд╕ рдПрд░реЗ рдореЗрдВ рд╡реЗ рдПрд▓реАрдореЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдПрд░реЗ рд╕реЗ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВред
 var ul = function(arr){ if (!arr[0]) return '' else{ var html = '<ul>'; var length = arr.length; for (var i = 0; i < length; i++){ var el = arr[i]; var childs = getChilds(el, arr); arr = cleanDuplicates(arr, childs) html += '<li>'+'<span id="cat_'+el.id+'">'+el.name+'</span>' html += ul(childs) html += '</li>' } return html + '</ul>' } } 

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:
 '<div class="tree">' + ul(data) + '</div>' 

рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╣реИред
рдЯреНрд░реА рдореЗрдиреВ рдореЗрдВ рдЗрд╕ рд╕реВрдЪреА рдХреЗ рдЕрдВрддрд┐рдо рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП, jQuery рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП jQuery рдХреЗ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ ред
рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЖрдкрдХреЛ рдкрд╣рд▓реЗ jQuery рдХреЛ рдЦреБрдж рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдлрд┐рд░ рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЛред рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрд╕ рдЗрд╕реЗ рдЕрдкрдиреА рдЙрддреНрдкрдиреНрди рд╕реВрдЪреА рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдпрджрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ $ ('рдЯреНрд░реА') рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИред
 $('.tree').treeview(); 

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

рдкреБрдирд╢реНрдЪ рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ jQuery рдЯреНрд░реАрд╡реНрдпреВ рдкреНрд▓рдЧрдЗрди рдЕрдм рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рдХрд╛рд░реНрдп рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреНрд░реА рдореЗрдиреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВред рдбреЗрд╡рд▓рдкрд░ рдЦреБрдж JqTree рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред

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


All Articles