16.12.2013, 08:09
|
Новичок на форуме
|
|
Регистрация: 27.01.2012
Сообщений: 8
|
|
Сохранить древовидную структуру в JSON
Всем привет! Очень прошу помочь с решением задачи.
Есть дерево:
<body>
<ul id="tree">
<li data-id="0">Автомобили
<ul>
<li data-id="1">Japan
<ul>
<li data-id="2">Toyota
<ul>
<li data-id="3">Camry</li>
<li data-id="4">Avensis</li>
</ul>
</li>
<li data-id="5">Mazda</li>
</ul>
</li>
</ul>
</ul>
</body>
необходимо это дерево поместить в объект вида:
var cars={
Автомобили:{"children":[1], id="0"},
Japan: {"children":[2], id="1"},
Toyota:{"children":[3, 4], id="2"},
Mazda:{"children":[], id="5"}
}
пробовал разными способами делать обход дерева, но ничего не получается.
Через рекурсию:
function scan(el, obj) {
var nodeList = el.childNodes;
if (nodeList != null) {
obj["children"]=[];
for (var i = 0; i < nodeList.length; i++) {
if (nodeList[i].nodeType == 1) {
if(nodeList[i].firstChild.nextSibling.dataset.id)
obj["child"].push(nodeList[i].firstChild.nextSibling.dataset.id);
}
scan(nodeList[i], obj["children"]);
}
}
return obj;
}
scan(document.getElementById('tree'), {})
|
|
16.12.2013, 09:46
|
Новичок на форуме
|
|
Регистрация: 27.01.2012
Сообщений: 8
|
|
прошу прощения:
var cars={
Автомобили:{"children":[1], id:"0"},
Japan: {"children":[2], id:"1"},
Toyota:{"children":[3, 4], id:"2"},
Mazda:{"children":[], id:"5"}
}
|
|
16.12.2013, 10:57
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
Правильный объект:
var cars = {
"Автомобили" : {
"id" : 1,
"country" : {
"Japan" : {
"id" : 11,
"mark" : {
"Toyota" : {
"id" : 111,
"model" : {
"Camry" : { "id" : 1111 },
"Avensis" : { "id" : 1112 }
}
},
"Mazda" : {
"id" : 112,
"model" : {
"CX-9" : { "id" : 1121 }
}
}
}
},
"Russia" : {
"id" : 12,
"mark" : {
"Lada" : {
"id" : 121,
"model" : {
"Kalina" : { "id" : 1211 },
"Priora" : { "id" : 1212 }
}
},
"UAZ" : {
"id" : 122,
"model" : {
"Patriot" : { "id" : 1221 }
}
}
}
}
}
}
};
alert( cars['Автомобили'].country['Japan'].mark['Toyota'].model['Camry'].id );
alert( cars['Автомобили'].country['Russia'].mark['Lada'].model['Kalina'].id );
Последний раз редактировалось Rise, 16.12.2013 в 11:15.
|
|
16.12.2013, 11:23
|
Новичок на форуме
|
|
Регистрация: 27.01.2012
Сообщений: 8
|
|
Хорошо, пусть будет такая структура (она лучше чем моя, потому что есть вложенность элементов), пусть по подобию вашего объекта я восстановлю исходное дерево, но у меня проблема в программном создании такой структуры по HTML. Намекните хотя бы в каком направлении двигаться.
В общем моя задача состоит в создании дерева и последующем его сохранении здесь
есть пример обратной задачи, т.е. считывание из объекта.
|
|
16.12.2013, 12:04
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Сообщение от timkit
|
Есть дерево
|
Откуда оно взялось? Кто-то же его посадил, верно? Дык может посадить сразу JSON-дерево, не?
__________________
В личку только с интересными предложениями
|
|
16.12.2013, 12:21
|
Новичок на форуме
|
|
Регистрация: 27.01.2012
Сообщений: 8
|
|
Сообщение от danik.js
|
Откуда оно взялось? Кто-то же его посадил, верно? Дык может посадить сразу JSON-дерево, не?
|
Ну спроси у головы на своем аватаре, откуда оно там взялось. Кстати смени его, а то примета плохая.
|
|
16.12.2013, 15:18
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,068
|
|
timkit,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<ul id="tree">
<li data-id="0">Автомобили
<ul>
<li data-id="1">Japan
<ul>
<li data-id="2">Toyota
<ul>
<li data-id="3">Camry</li>
<li data-id="4">Avensis</li>
</ul>
</li>
<li data-id="5">Mazda</li>
</ul>
</li>
</ul>
</li>
</ul>
<script>
function h(b, c) {
b = b.children;
for (var d = b.length, a; a = b[--d];) "li" == a.tagName.toLowerCase() ? (c['li '+a.dataset.id] = {},
c['li '+a.dataset.id][a.firstChild.data] = h(a, {})) : c.ul = h(a, {});
return c
};
var data = h(document.getElementById('tree'), {})
document.write(JSON.stringify(data))
</script>
</body>
</html>
|
|
16.12.2013, 19:15
|
Новичок на форуме
|
|
Регистрация: 27.01.2012
Сообщений: 8
|
|
Большое спасибо Рони , буду дальше разбираться
|
|
16.12.2013, 19:19
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
рони, ты из "благих намерений" обфусцируешь, дабы неповадно было на форум обращаться, или считаешь что код таким и должен быть?
__________________
В личку только с интересными предложениями
|
|
16.12.2013, 19:55
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,068
|
|
danik.js,
а вы из благих намерений всех гнобите, кто знает меньше вас, чтобы им
Сообщение от danik.js
|
дабы неповадно было на форум обращаться
|
или как?
|
|
|
|