下記のようにjQueryで外部のJSONデータをfor in文でHTML内に出力させている状態で、JSONに記述している順番ではなくランダムに出力させたいのですが、どのようなロジックで処理すればいいかがわからず悩んでいます。
【HTML(js)】
〜 一部抜粋 〜 <ul id="wrap"> <script> $(function(){ $.getJSON("./sample.json",function(list){ for(var i in list) { var h = '<li>' + list[i].area + '<ul>'; for(var j in list[i].city){ h += '<li>' + list[i].city[j].name + '</li>'; } h += '</ul>' + '</li>'; $("#wrap").append(h); } }); }); </script> </ul>
【JSON】
[ { "area": "東北", "city": [ {"name": "青森"}, {"name": "秋田"}, {"name": "盛岡"}, {"name": "仙台"} ] }, { "area": "関東", "city": [ {"name": "東京"}, {"name": "埼玉"}, {"name": "千葉"} ] }, { "area": "近畿", "city": [ {"name": "大阪"}, {"name": "神戸"}, {"name": "京都"} ] } ]
【出力後のHTML】
<ul id="wrap"> <li>東北 <ul> <li>青森</li> <li>秋田</li> <li>盛岡</li> <li>仙台</li> </ul> </li> <li>関東 <ul> <li>東京</li> <li>埼玉</li> <li>千葉</li> </ul> </li> <li>近畿 <ul> <li>大阪</li> <li>京都</li> <li>神戸</li> </ul> </li> </ul>
配列の値をランダムに表示させるようにしたところ、変数hに入っている文字「<、u、l、」単位でランダムに表示されてしまい、for文でループさせているブロック(id="wrap"直下のli要素)単位で表示させるのが実現したいことです。そもそも、上記のようなアプローチではなく他の方法を検討する必要があるのかもしれませんが、、
id="wrap"直下のli要素の並びをランダムに表示させるようにしたいのですが、どのようにすればいいのかご教授いただけますと幸いです。
【解決後のjs】
<script> $(function(){ $.getJSON("./sample.json",function(list){ var arry = list; var numbers = []; for (var i = 0; i < arry.length; i++) { numbers.push(Math.random()); } var atRandom = arry.sort(function (a, b) { return numbers[arry.indexOf(a)] - numbers[arry.indexOf(b)]; }); for(var i in atRandom) { var h = '<li>' + atRandom[i].area + '<ul>'; for(var j in atRandom[i].city){ h += '<li>' + atRandom[i].city[j].name + '</li>'; } h += '</ul>' + '</li>'; $("#wrap").append(h); } }); }); </script>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/31 02:27
2018/07/31 05:52