teratail header banner
teratail header banner
質問するログイン新規登録
EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

JavaScript

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

Q&A

解決済

2回答

560閲覧

EJSでforを使って効率化したい

harigoE8

総合スコア10

EJS

EJSは、JavaScript用のテンプレートエンジン。HTMLなどのテンプレートテキストにJavaScriptのロジックを記述することができます。また、変数・関数の実行をテンプレートテキスト内に埋め込むことも可能です。

JavaScript

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

0グッド

0クリップ

投稿2022/01/19 03:22

0

0

実現したい事

現在、ejsを使用しながらHPを作成しております。
似たようなコンテンツが多いのでforEachを使ってまとめて書きたいと考えました。
しかし、上手く行かずハマっているので、是非ご教授頂きたいです。
ちなみに完成形のイメージとしてはこちらです。↓

イメージ説明
上記のようなboxを12個作ります。

発生している問題・エラーメッセージ

現状はこんな感じになっています。↓

イメージ説明
一つのboxで各画像を12回繰り返している感じになっています。

該当のソースコード

index.ejs

1<% var title= "TOP"; var description = "トップのdescription"; %> 2<% var mainName = ['01','04','06','08','10','12','14','14','14','14','14','14']; %> 3<% var mainIcon = ['46','48','50','52','54','56','58','60','62','63','65','66']; %> 4<% var mainTitle = ['16','19','21','23','26','28','31','33','35','37','40','43']; %> 5 6<% include src/ejs/template/_head %> 7 <div class="l-main"> 8 <% include src/ejs/template/_sidebar %> 9 <div class="l-main__menu"> 10 <% for (var i = 0; i < 12; i++) { %> 11 <div class="p-menuBox"> 12 <% mainName.forEach(function (value) { %> 13 <div class="p-menuBox__name"><img src="../assets/images/mainmenu/menu/spr_top01_<%= value %>.png"></div> 14 <% }); %> 15 <div class="p-menuBox__inner"> 16 <% mainIcon.forEach(function (value) { %> 17 <div class="p-menuBox__icon"><img src="../assets/images/mainmenu/icon/spr_top01_<%= value %>.png"></div> 18 <% }); %> 19 <% mainTitle.forEach(function (value) { %> 20 <div class="p-menuBox__title"><img src="../assets/images/mainmenu/menu2/spr_top01_<%= value %>.png"></div> 21 <% }); %> 22 <div class="p-menuBox__text"> 23 <p>グッピーズは、人材採用をITで革新し続ける企業です。</p> 24 </div> 25 </div> 26 </div><% } %> 27 28 </div> 29 30 31 32<% include src/ejs/template/_footer %> 33

_menuBox.scss

1.p-menuBox { 2 display: flex; 3 flex-wrap: wrap; 4 justify-content: center; 5 align-items: flex-start; 6 height: 230px; 7 width: 230px; 8 border: solid 1px #cc9933; 9 10 &:nth-of-type(n + 4) { 11 margin-top: 10px; 12 } 13 14 &:hover { 15 background-color: #bbb; 16 } 17 18 #{&}__name { 19 display: inline-block; 20 width: 100%; 21 height: 15px; 22 margin-top: 10px; 23 } 24 25 #{&}__inner { 26 display: flex; 27 flex-wrap: wrap; 28 justify-content: center; 29 width: 200px; 30 } 31 32 #{&}__icon { 33 width: 80px; 34 height: 80px; 35 } 36 37 #{&}__title { 38 margin-top: 10px; 39 width: 100%; 40 height: 20px; 41 } 42 43 #{&}__text { 44 margin-top: 10px; 45 font-size: 5px; 46 font-size: 0.5rem; 47 } 48} 49

なぜこうなっているのか現在原因を究明している所です。
詳しい方ございましたら、アドバイスまた参考サイトをご教授頂けますと幸いです。

補足情報(FW/ツールのバージョンなど)

・npm -v 6.9.0
・node -v 12.6.0
・webpack -v 5.65.0
・ yarn -v 1.22.17

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

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

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

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

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

guest

回答2

0

予想だけどforEachは全部いらないんじゃない?
外側で1から12までインデックスで回してるんなら
mainName[i]とかで取得するべきなんじゃ?

js

1for (var i = 0; i < 12; i++) { 2 mainName.forEach(function (value) { 3 mainIcon.forEach(function (value) {}) 4 mainTitle.forEach(function (value) {}) 5 }) 6}

こんな風に書いていたら「mainNameの要素12個?すべてに対する処理をさらに12回やる」ことになるよ
mainIconとかはさらにその下にあるから12×12×12回くらい回しています。

最終的に使わなくなりそうだけど変数名valueは名前かぶってるので
思っている内容が取れなくなってると思います。value1,value2,value3とかにするか
name,icon,titleとか分かりやすい変数名にしましょ

投稿2022/01/19 04:26

編集2022/01/19 04:29
sousuke

総合スコア3830

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

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

0

自己解決

ご回答ありがとうございます。

index.ejs

1<% include src/ejs/template/_head %> 2 <div class="l-main"> 3 <% include src/ejs/template/_sidebar %> 4 <div class="l-main__menu"> 5 <% for (var i = 0; i < 12; i++) { %> 6 <div class="p-menuBox"> 7 <div class="p-menuBox__name"><img src="../assets/images/mainmenu/menu/spr_top01_<%= mainName[i] %>.png"></div> 8 <div class="p-menuBox__inner"> 9 <div class="p-menuBox__icon"><img src="../assets/images/mainmenu/icon/spr_top01_<%= mainIcon[i] %>.png"></div> 10 <div class="p-menuBox__title"><img src="../assets/images/mainmenu/menu2/spr_top01_<%= mainTitle[i] %>.png"></div> 11 <div class="p-menuBox__text"> 12 <p><%= mainText[i] %></p> 13 </div> 14 </div> 15 </div><% } %> 16 </div> 17 </div> 18 19 20 21<% include src/ejs/template/_footer %> 22

上記のように設定した所上手く行きました。
ご教授ありがとうございました!!

投稿2022/01/19 23:59

harigoE8

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問