Я пытаюсь создать список в списке. Хотя я могу успешно создать родительский список, мне не удается внедрить итерацию подмассива.
У меня есть массив объектов. Эти объекты могут иметь массивы объектов внутри них. Пример:
[
{ class: 'math', students: [ student objs ] }
,{ class: 'science', students: [ student objs ] }
]
Я хочу итеративно составить список классов и внутри классов учащихся.
var data = [
// { id:'math', students: [ { id:'math student a' }, { id:'math student b'} ] },
{ id:'sciences', students: [ { id:'sci student c' }, { id:'sci student d', award: [ { id: "award a" }, { id: "award b"} ] }
] } ];
function fillElement( arr, dom ) {
var outerEl = document.createDocumentFragment();
dom.appendChild(document.createElement('ul'));
arr.forEach(function ( obj,idx ) {
var li = document.createElement('li');
var ul = document.createElement('ul');
li.textContent = obj.id;
outerEl.appendChild( li );
dom.querySelector('ul:first-of-type').appendChild( outerEl );
for (var prop in obj) {
if( Array.isArray( obj[prop] ) ){
dom = dom.querySelector('li:last-of-type').appendChild(document.createElement('ul'));
fillElement( obj[prop], dom );
}
}
});
};
var dom = document.querySelector("#dom");
fillElement( data,dom );
Как объединить два фрагмента, чтобы получить встроенный домен
<ul>
<li>math</li>
<li>
<ul>
<li>student a</li>
<li>student b</li>
</ul>
</li>
</ul>
В настоящее время мой HTML как таковой
<div id="dom"><ul>
<li>sciences<ul>
<ul>
<li>sci student c</li>
<li>sci student d<ul>
<ul>
<li>award a</li>
<li>award b</li>
</ul>
</ul>
</li>
</ul>
</ul>
</li>
</ul>
</div>