質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

6090閲覧

jsで配列の中身をhtmlの任意の場所に入れたい

sanpei

総合スコア15

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

2クリップ

投稿2017/04/10 04:23

下記のような配列のidの値と、HTMLの<li class=クラス名>が一致する場所に
配列のdataの値を入れたいと考えております。
また、HTML側の<li>は15個に固定して、配列の中身が13個しかない場合はブランク画像を表示したいです。

考え方や方法などをご教授いただけないでしょうか。

やりたいことは以下になります。

javascript

1//配列を入れる<li>を作成 2for(var classNo =1; classNo < 16; classNo++) 3{ 4 $('#contentsArea ul').append('<li class ="id' + classNo + '"></li>'); 5} 6 7//入れたい配列 8 var listA = [ 9 { id: 1, data: aaa}, 10 { id: 2, data: bbb}, 11 //{ id: 3, data: ccc}, 12 { id: 4, data: ddd}, 13 { id: 5, data: eee}, 14 { id: 6, data: fff}, 15 { id: 7, data: ggg}, 16 { id: 8, data: hhh}, 17 { id: 9, data: iii}, 18 //{ id: 10, data: jjj}, 19 { id: 11, data: kkk}, 20 { id: 12, data: lll}, 21 { id: 13, data: mmm}, 22 { id: 14, data: nnn}, 23 { id: 15, data: ooo} 24 ];

html

1<!--生成されるHTML--> 2<ul id="contentsArea"> 3 <li class="id1">aaa</li> 4 <li class="id2">bbb</li> 5 <li class="id3"><img src="blank.png"></li><!--該当idがなければ'blank.png'を表示--> 6 <li class="id4">ddd</li> 7 <li class="id5">eee</li> 8 <li class="id6">fff</li> 9 <li class="id7">ggg</li> 10 <li class="id8">hhh</li> 11 <li class="id9">iii</li> 12 <li class="id10"><img src="blank.png"></li> 13 <li class="id11">kkk</li> 14 <li class="id12">lll</li> 15 <li class="id13">mmm</li> 16 <li class="id14">nnn</li> 17 <li class="id15">ooo</li> 18</ul>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

とりあえずおかしなところは想像で補完しています

HTML

1<script> 2$(function(){ 3 var listA = [ 4 { id: 1, data: "aaa"}, 5 { id: 2, data: "bbb"}, 6 //{ id: 3, data: "ccc"}, 7 { id: 4, data: "ddd"}, 8 { id: 5, data: "eee"}, 9 { id: 6, data: "fff"}, 10 { id: 7, data: "ggg"}, 11 { id: 8, data: "hhh"}, 12 { id: 9, data: "iii"}, 13 //{ id: 10, data: "jjj"}, 14 { id: 11, data: "kkk"}, 15 { id: 12, data: "lll"}, 16 { id: 13, data: "mmm"}, 17 { id: 14, data: "nnn"}, 18 { id: 15, data: "ooo"} 19 ]; 20 $('ul#contentsArea li').remove(); 21 for(var i=1; i<= 15; i++){ 22 var j=((listA.filter(function(x){return x["id"]==i}))).shift(); 23 if(j!==undefined){ 24 $('ul#contentsArea').append($('<li>').attr("class","id"+j.id).text(j.data)); 25 }else{ 26 $('ul#contentsArea').append($('<li>').append($('<img>').attr("src","blank.jpg"))); 27 } 28 } 29}); 30</script> 31<ul id="contentsArea"></ul>

追記

noで更に分ける場合、ただし前回と違ってidが0から始まっているのはどうしますか?
いまのままだとid=0は無視されます
no:2のidがダブっているのでshiftにより先に設定されたa2~c2の方が取り出されます

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script> $(function(){ var listA = [ { no: 1, id: 0, data: "a1"}, { no: 1, id: 1, data: "b1"}, { no: 1, id: 15, data: "c1"}, { no: 2, id: 0, data: "a2"}, { no: 2, id: 1, data: "b2"}, { no: 2, id: 15, data: "c2"}, { no: 2, id: 0, data: "a3"}, { no: 2, id: 1, data: "b3"}, { no: 2, id: 15, data: "c3"}, ]; $('ul#contentsArea li').remove(); for(var i=1; i<= 15; i++){ var j1=((listA.filter(function(x){return x["id"]==i && x["no"]==1}))).shift(); var j2=((listA.filter(function(x){return x["id"]==i && x["no"]==2}))).shift(); if(j1!==undefined){ $('ul#contentsArea').append($('<li>').attr("class","id"+j1.id).text(j1.data)); }else{ $('ul#contentsArea').append($('<li>').append($('<img>').attr("src","blank.jpg"))); } if(j2!==undefined){ $('ul#contentsArea2').append($('<li>').attr("class","id"+j2.id).text(j2.data)); }else{ $('ul#contentsArea2').append($('<li>').append($('<img>').attr("src","blank.jpg"))); } } }); </script> <ul id="contentsArea"></ul> <ul id="contentsArea2"></ul>

投稿2017/04/10 04:42

編集2017/04/10 11:03
yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanpei

2017/04/10 09:26

ご回答ありがとうございました。 ドンピシャで実現することができました! まだfilter()で条件を指定して絞りだした後に、 shift()メソッドで先頭要素を削除して詰めている意味が理解できていませんが、 (shft()を外すと値がundefinedになるとか) これから勉強いたします。 あと、追加の質問で大変恐縮ですが… この配列を外部jsonで使用し、さらに[id]の値で処理を分けたいと思い、 case文を使用して処理を行おうと考えましたが、 現状スキル不足すぎて下記に収まっています。 さわりだけでもご教授いただけないでしょうか。 --------------- data.json [ { no: 1, id: 0, data: "aaa"}, { no: 1, id: 1, data: "bbb"}, //~省略~ { no: 1, id: 15, data: "bbb"}, { no: 2, id: 0, data: "aaa"}, { no: 2, id: 1, data: "bbb"}, //~省略~ { no: 2, id: 15, data: "bbb"}, { no: 2, id: 0, data: "aaa"}, { no: 2, id: 1, data: "bbb"}, //~省略~ { no: 2, id: 15, data: bbb} ] --------------- data.js $.getJSON(path,function(data) { //["no"]が1の時の処理 for(var i =0; i < 15; i++) { var jShift = data.filter(function(x){return x["id"] == i && x["no"] == 1}); var j = jShift.shift(); if(j!==undefined) { $('ul#contentsArea01').append($('<li>').attr("class","id"+j.id).text(j.data)); } else { $('ul#contentsArea01').append($('<li>').append($('<img>').attr("src","blank.jpg"))); } } //["no"]が2の時の処理 for(var i =0; i < 15; i++) { var jShift = data.filter(function(x){return x["id"] == i && x["no"] == 2}); var j = jShift.shift(); if(j!==undefined) { $('ul#contentsArea02').append($('<li>').attr("class","id"+j.id).text(j.data)); } else { $('ul#contentsArea02').append($('<li>').append($('<img>').attr("src","blank.jpg"))); } //~省略~
yambejp

2017/04/10 10:57

>filter()で条件を指定して絞りだした後に、 >shift()メソッドで先頭要素を削除して 本来上記処理である必要はないのですが、今のデータ構造からすると 必ずしもidがユニークだとは限らないので、念の為idが合致するデータをfilterした後 先頭のデータをとりだしています。(削除しているのではなく先頭をとりだす) noごとにulを替える処理は追記しておきます
sanpei

2017/04/11 02:11

変数に代入されるshift()の返り値は、取り除かれた先頭値ですね。 失礼いたしました。 追記の処理もありがとうございます! 記述ミス(no2の重複→no3)があり、ご迷惑をおかけしました。 id=0の件はループを0スタートにして対応しました。 for(var i =0; i < 15; i++) おかげさまで思い描く処理を実現できました。 感謝申し上げます!
guest

0

こういう感じとかどうでしょう。(全部は書いていません)

HTML

1<ul id="contentsArea"> 2 <li data-id="1"></li> 3 <li data-id="2"></li> 4 <li data-id="3"></li> 5 <li data-id="4"></li> 6 <li data-id="5"></li> 7 <li data-id="6"></li> 8 <li data-id="7"></li> 9 <li data-id="8"></li> 10 <li data-id="9"></li> 11 <li data-id="10"></li> 12 <li data-id="11"></li> 13 <li data-id="12"></li> 14 <li data-id="13"></li> 15 <li data-id="14"></li> 16 <li data-id="15"></li> 17</ul>

JavaScript

1//入れたい配列 2var listA = [ 3 { id: 1, data: aaa}, 4 { id: 2, data: bbb}, 5 //{ id: 3, data: ccc}, 6 { id: 4, data: ddd}, 7 { id: 5, data: eee}, 8 { id: 6, data: fff}, 9 { id: 7, data: ggg}, 10 { id: 8, data: hhh}, 11 { id: 9, data: iii}, 12 //{ id: 10, data: jjj}, 13 { id: 11, data: kkk}, 14 { id: 12, data: lll}, 15 { id: 13, data: mmm}, 16 { id: 14, data: nnn}, 17 { id: 15, data: ooo} 18]; 19$('#contentsArea ul li').each( function() { 20 var $_t = $( this ); 21 var id = $_t.attr( 'data-id' ); 22 var data = '<img src="blank.png">'; 23 24 /* listA から id が同じものを探す */ 25 /* あったら中身を変数dataに代入 */ 26 27 $_t.html( data ); 28} );

投稿2017/04/10 04:40

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sanpei

2017/04/10 09:26

ご回答ありがとうございました。 HTML5のカスタムデータ属性を初めて知りました。 処理の方法も大変勉強になりました。 これからぜひとも活用させていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問