実現したいこと
- 複数のjsonファイルから複数のテーブルを作成する
例えば、List1.jsonの内容を<div id="List1">に、List2.jsonの内容を<div id="List2">に、というようなことを実現したいです。
jsonファイルは今後も増える予定です。
その際ほぼ同じ内容のJavaScriptをたくさん増やしたくはないので、できれば1つのJavaScriptを使いまわしたいです。
質問
こちらのサイトを参考に一つのファイルから一つのテーブルを作成することはできましたが、どちらも数を増やすと失敗してしまいます。
現在、上記サイトにあるJavaScriptを参考にして作ったスクリプトを使っているのですが、このスクリプトで読み込んでいるjsonファイルと出力先のidセレクタを、どうにかして使いたいjsonファイルに合わせて変えられないかなと考えています。
実現したいことに書いた通り、ほぼ同じ内容のJavaScriptを何個も増やしたくないです。
それでもjsonとidだけ変更して、増やしたいテーブルの数だけJavaScriptを増やさなければならないでしょうか?
何か方法があれば教えていただきたいです。
該当のソースコード
HTML
1<div class="flex_test-box"> 2 <div class="flex_test-item"> 3 <div> 4 <!-- ここに表示したい --> 5 <div id="List1"></div> 6 </div> 7 </div> 8</div> 9<div class="flex_test-box"> 10 <div class="flex_test-item"> 11 <div> 12 <!-- ここに表示したい --> 13 <div id="List2"></div> 14 </div> 15 </div> 16</div>
JavaScript
1$(function (){ 2 $.getJSON('List1.json', function(data) 3 { 4 var src = data.map(function(i) 5 { 6 return '<tr class="' + i.class + '">' + 7 '<td>' + i.button + '</td>' + 8 '<td>' + i.song + '</td>' + 9 '</tr>'; 10 }) 11 .join(''); 12 13 src = '<table>' + src + '</table>'; 14 $( '#List1' ).append(src); 15 }); 16});
試したこと
- HTMLにdataを書いてJavaScriptから取得して使う方法
HTML
1<div data-id="table" 2 data-file="List1.json" 3 data-List="#List1">
として、JavaScriptからファイル名と出力するidセレクタを取得し、代入して使用しました。
一つの時はうまくいきましたが、数を増やすとdata-idが重複してしまうため失敗しました。
- 配列とfor文を使う方法
JavaScript
1var List = [ 2 { 3 FileName: 'List1.json', 4 Space: '#List1' 5 }, 6 { 7 FileName: 'List2.json', 8 Space: '#List2' 9 } 10]; 11 12$(function (){ 13 for(var i = 0; i < List.length; i++) 14 { 15 $.getJSON(List[i]['FileName'], function(data) 16 { 17 var src = data.map(function(i) 18 { 19 return '<tr class="' + i.class + '">' + 20 '<td>' + i.button + '</td>' + 21 '<td>' + i.song + '</td>' + 22 '</tr>'; 23 }) 24 .join(''); 25 26 src = '<table>' + src + '</table>'; 27 $( '#List' + i ).append(src); 28 }); 29 } 30});
配列のi番目を使ってどうにかできないかと考えました。
この方法ではList1.jsonとList2.jsonの内容を全て#List1に表示してしまい失敗します。
その際、データの個数はあっているのですが、1つ目のファイルだけ全て正常に読み取れ、2つ目以降のファイルはデータが全てundefinedになっています。
$( '#List' + i ).append(src);
は本来
$( List[i]['Space'] ).append(src);
としていましたが、表示すらできなくなるので現在の形にしています。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/07 17:33
2023/11/08 03:48 編集
2023/11/08 03:19
2023/11/09 02:17