#やりたいこと
下記のようなJSONデータがあり、親子関係からリストを作成したい。
データ
input
1const data = eval( 2{ 3"1": {"H10": "CAP", "H20": "GR", "H30": "GR-TC", "H40": "GR01TC", "Strategy": "11AA"}, 4"2": {"H10": "CAP", "H20": "GR", "H30": "GR-TC", "H40": "GR02TC", "Strategy": "11AB"}, 5"3": {"H10": "CAP", "H20": "GR", "H30": "GR-TC", "H40": "GR03TC", "Strategy": "11AC"} 6}
アウトプット
下表のように共通キーを一つの親にして、階層をリスト化したい
data
1□CAP 2 □GR 3 □GR-TC 4 □GR01TC 5 □GR02TC 6 □GR03TC
#現状
下記のように、キーをリストとして、itemに入れて回しています。
親子関係は階層の深さDEPTHを使って表しています。
#やりたいこと
子の要素の際に、<UL></ul>で要素を括りたい
appendTo で親要素に<ul>を付けていますが、うまくいかない
#質問
JqueryでDEPTHの深さに応じて、要素そのものを<ul>で括り、インデントを下げて表示をしたい。
すみませんが、jqueryに不慣れですので、教えてください。
js
1 for(j=0;j<depth;j++){ 2 $parentUL = $('<ul>', { 3// style: 'display: none'// 4 }).appendTo($item); 5 }
JavaScript
1<script type='text/javascript'> 2 3const data = eval({{df|tojson|safe}}); 4 5function addItem(parentUL, branch) { 6 var buf=[]; 7 for (i=1;i<Object.keys(branch).length;i++){ 8 depth =0; 9 for (var item in branch[1]) { //loop of key value 10 switch(i){ 11 case 1: 12 buf[item]=branch[i][item] //init value 13 addhtml(parentUL,i,branch[i][item],depth); 14 break; 15 16 default: 17 if (branch[i][item]==buf[item]){ 18 break; 19 } 20 } 21 depth=depth+1; 22 } 23} 24} 25 26function addhtml(parentUL,i,text,depth){ 27 $item = $('<li>', { 28 id: "item" + i 29 }); 30 $item.append($('<input>', { 31 type: "checkbox", 32 id: "item" + i, 33 name: "item" + i 34 })); 35 $item.append($('<label>', { 36 for: "item" + i, 37 text: text 38 })); 39 for(j=0;j<depth;j++){ 40 $parentUL = $('<ul>', { 41// style: 'display: none'// 42 }).appendTo($item); 43 } 44 parentUL.append($item); 45} 46 47$(document).ready(function () { 48 addItem($('#root1'), data); 49 $(':checkbox').change(function () { 50 $(this).closest('li').children('ul').slideToggle(); 51 }); 52 $('label').click(function(){ 53 $(this).closest('li').find(':checkbox').trigger('click'); 54 }); 55}); 56</script> 57 58
html で静的イメージ(モック)は作ってみましたか?
それができてないと動的に作るのは難しいかと思います。
回答1件
あなたの回答
tips
プレビュー