前提条件
CSVファイルを作成→gulpでJSONデータに変換→EJSで読み込む→HTMLに出力
という流れで現在制作をしています。
やりたいこと
項目が複数あるうち、一つの項目**(※項目5)**だけが値を複数もっています。
その複数の値をひとつずつループさせて出力したい。
カンマ区切りでばらばらにして配列にするところまでできているが
取得の仕方がわからない。
(説明が分かりづらいと思うので、下記の①~④をご確認ください。)
①CSVファイルのイメージ
項目5はカンマ区切りになっていて、
これをひとつひとつバラして出力したい。
(今回はサンプルとして3行だけ用意しています。項目5の個数は行によって異なります。)
②EJS(項目5が出力できていないejs)
ejs
1<% for(var i = 0;i < sample.length;i++) { %> 2<a href="<%- sample[i]['項目1'] %>" class="p-new-item hover-opacity"> 3 <div class="p-new-item__mod"> 4 <p><%- sample[i]['項目2'] %><span><%- sample[i]['項目3'] %></span></p> 5 6 <ul class="p-new-item__category"> 7 <li class="category-item"><% ここに、項目5にある分だけの値を取得&出力したい %></li> 8 </ul> 9 </div> 10 <p class="p-new-item__btn"><%- sample[i]['項目4'] %></p> 11</a> 12<% } %>
③JSON(sampleという名前でejsと連携させています)
json
1[{"項目1":"一週目:項目1の内容","項目2":"一週目:項目2の内容","項目3":"一週目:項目3の内容","項目4":"一週目:項目4の内容","項目5":"項目5-1,項目5-2,項目5-3"},{"項目1":"二週目:項目1の内容","項目2":"二週目:項目2の内容","項目3":"二週目:項目3の内容","項目4":"二週目:項目4の内容","項目5":"項目5-2-1,項目5-2-2,項目5-2-3"},{"項目1":"三週目:項目1の内容","項目2":"三週目:項目2の内容","項目3":"三週目:項目3の内容","項目4":"三週目:項目4の内容","項目5":"項目5-3-1,項目5-3-2,項目5-3-3"}]
④成功イメージHTML
※該当ソースをteratail用に修正しているのでタグの使い方ミスやclass名の揺れは一旦無視してください。
html
1<a href="一週目:項目1の内容" class="p-new-item hover-opacity"> 2 <div class="p-new-item__mod"> 3 <p>一週目:項目2の内容<span>一週目:項目3の内容</span></p> 4 <ul class="p-new-item__category"> 5 <li class="category-item">項目5-1</li>//例が悪いのですが、この「.category-item」の数は変化する 6 <li class="category-item">項目5-2</li> 7 <li class="category-item">項目5-3</li> 8 </ul> 9 </div> 10 <p class="p-new-item__btn">一週目:項目4の内容</p> 11</a> 12<a href="二週目:項目1の内容" class="p-new-item hover-opacity"> 13 <div class="p-new-item__mod"> 14 <p>二週目:項目2の内容<span>二週目:項目3の内容</span></p> 15 <ul class="p-new-item__category"> 16 <li class="category-item">項目5-2-1</li>//例が悪いのですが、この「.category-item」の数は変化する 17 <li class="category-item">項目5-2-2</li> 18 <li class="category-item">項目5-2-3</li> 19 </ul> 20 </div> 21 <p class="p-new-item__btn">二週目:項目4の内容</p> 22</a> 23<a href="三週目:項目1の内容" class="p-new-item hover-opacity"> 24 <div class="p-new-item__mod"> 25 <p>三週目:項目2の内容<span>三週目:項目3の内容</span></p> 26 <ul class="p-new-item__category"> 27 <li class="category-item">項目5-3-1</li>//例が悪いのですが、この「.category-item」の数は変化する 28 <li class="category-item">項目5-3-2</li> 29 <li class="category-item">項目5-3-3</li> 30 </ul> 31 </div> 32 <p class="p-new-item__btn">三週目:項目4の内容</p> 33</a>
ためしたこと
ejs
1 <ul class="p-new-item__category"> 2 <% var str = sample[i]['項目5']; 3 var arr = str.split(','); 4 %> 5 <li class="category-item"><%- arr[0] %></li> 6 </ul> 7//=>これで<%- arr[0] %>、<%- arr[1] %>・・・と記載していくと希望通りの形になりますが 8今回個数が固定になっていないので不採用。
ejs
1for(var i = 0;i < sample.length;i++) { %> 2<%- arr[i] %> 3//=>1行分のみのループ+3行分の項目5分をループしている
ejs
1for(var i = 0;i < arr.length;i++) { 2arr[i] 3//=>ループが終わらない
※該当ソースをteratail用に修正しているのでタグの使い方ミスやclass名の揺れは一旦無視してください。
jsの問題かと思いますが、
アドバイスいただければ助かります。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/07 04:45