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, время: 04:43. |