Bootstrap меню с подгрузкой dropdown-menu в col-sm. Меню строится из json
Bootstrap меню с подгрузкой dropdown-menu в col-sm. Меню строится из json
Здравствуйте господа. Возникла огромная проблема с динамическим формированием меню. К сожалению, я немного понимаю в JS. Задача: имеется json файл из которого необходимо строить меню. ID "0010" и "0020" являются главными parent-ами. У меня получается вытащить все дочерние ветки, если пройтись циклом по json, и если ввести ключевые parentid. Но проблема в том, что дальше зайти, в дочерние ветки сформированных списков я никак не могу, потому что не понимаю как правильно это сделать по событию click в только что сформированном меню. Вдобавок, jsfiddle не формирует даже меню в первом col-sm level-1 : Ссылка Я правда надеюсь, что не слишком много прошу по данному поводу, но задача для меня оказалась сложной |
меню из json
omegarekrut,
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #test a + ul { display: none; } #test a.open + ul { display: block; } #test a{ cursor: pointer; display: inline-block; } #test a.dd:after{ content: "+"; margin-left: 4px; } #test a.dd.open:after{ content: "-"; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $.getJSON('https://api.myjson.com/bins/zlxnt', function(data) { data.forEach(function(el, i) { var parentId = el.PARENT; var parent = document.querySelector("#_"+parentId); if(!parent) { parent = document.querySelector("#test"); } else $(parent).prev().addClass("dd"); var li = $("<li>").appendTo(parent); $("<a>", {text : el.NAME}).appendTo(li); $("<ul>", {id : "_"+parentId}).appendTo(li); }) }) $("#test").on("click", "a", function(event) { event.preventDefault(); this.classList.toggle("open") }) }); </script> </head> <body> <ul id="test"></ul> </body> </html> |
рони,
Что-то меню не совсем соответствует структуре JSON Код:
[{"CID":"0001","PARENT":"0000","LINK":"0001","NAME":"Системное меню"},{"CID":"0010","PARENT":"0001","LINK":"0010","NAME":"Система"},{"CID":"0020","PARENT":"0001","LINK":"0020","NAME":"Разделы учета"},.... <!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #_0000 a + ul { display: none; } #_0000 a.open + ul { display: block; } #_0000 a{ cursor: pointer; display: inline-block; } #_0000 a.dd:after{ content: "+"; margin-left: 4px; } #_0000 a.dd.open:after{ content: "-"; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $.getJSON('https://api.myjson.com/bins/zlxnt', function(data) { console.log(JSON.stringify(data)); data.forEach(function(el, i) { var parentId = el.PARENT; var parent = document.querySelector("#_"+parentId); $(parent).prev().addClass("dd"); var li = $("<li>").appendTo(parent); $("<a>", {text : el.NAME}).appendTo(li); $("<ul>", {id : "_"+el.CID}).appendTo(li); }) }) $("#_0000").on("click", "a", function(event) { event.preventDefault(); this.classList.toggle("open") }) }); </script> </head> <body> <ul id="_0000"></ul> </body> </html> |
Dilettante_Pro,
:thanks: тогда строка 36 |
рони,
Да, недоправил. Удалил все лишнее из примера пост#3 |
может так ???
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #_0000 a + ul { display: none; } #_0000 a.open + ul { display: block; } #_0000 a{ cursor: pointer; display: inline-block; } #_0000 a.dd:after{ content: "+"; margin-left: 4px; } #_0000 a.dd.open:after{ content: "-"; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $.getJSON('https://api.myjson.com/bins/zlxnt', function(data) { console.log(JSON.stringify(data)); data.forEach(function(el, i) { var parentId = el.PARENT; var parent = document.querySelector("#_"+parentId); if(!parent) { parent = $("<ul>", {id : "_"+parentId}).appendTo("#_0000"); } else $(parent).prev().addClass("dd"); var li = $("<li>").appendTo(parent); $("<a>", {text : el.NAME}).appendTo(li); $("<ul>", {id : "_"+el.CID}).appendTo(li); }) }) $("#_0000").on("click", "a", function(event) { event.preventDefault(); this.classList.toggle("open") }) }); </script> </head> <body> <ul id="_0000"></ul> </body> </html> |
Dilettante_Pro,
нехватает некоторых пунктов без if(!parent) |
:( ??? что-то не так снова
|
:write: надо посмотреть :)
<!DOCTYPE html> <html> <head> <title>Untitled</title> <meta charset="utf-8"> <style type="text/css"> #_0000 a + ul { display: none; } #_0000 a.open + ul { display: block; } #_0000 a{ cursor: pointer; display: inline-block; } #_0000 a.dd:after{ content: "+"; margin-left: 4px; } #_0000 a.dd.open:after{ content: "-"; } </style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function() { $.getJSON('https://api.myjson.com/bins/zlxnt', function(data) { console.log(JSON.stringify(data)); data.forEach(function(el, i) { var parentId = el.PARENT; var parent = document.querySelector("#_"+parentId); var li; if(!parent) { li = $("<li>", {id : "_"+parentId}).appendTo("#_0000"); } else { $(parent).prev("a").addClass("dd"); li = $("<li>").appendTo(parent); }; $("<a>", {text : el.NAME}).appendTo(li); $("<ul>", {id : "_"+el.CID}).appendTo(li); }) }) $("#_0000").on("click", "a", function(event) { event.preventDefault(); this.classList.toggle("open") }) }); </script> </head> <body> <ul id="_0000"></ul> </body> </html> |
Этот элемент
{"CID":"02FX","PARENT":"0301","LINK":"02FX","NAME" :"Группы активов"} должен входить в {"CID":"0301","PARENT":"0300","LINK":"0301","NAME" :"Справочники"} Но не входит, потому что они идут в JSON в обратном порядке. М.Б. предварительно сортировать данные? |
Часовой пояс GMT +3, время: 17:33. |