js
1 let price_itme = $('#plan').children().length; 2 //=> 要素が2つの時、document.getElementByIdを2つ生成したい 3 for(let i=0;i<price_itme;i++){ 4 let dom1 = document.getElementById(`plan${i}`).style.display = "none"; 5 //let dom2 = document.getElementById(`plan${i}`).style.display = "none"; 6 }
実現したいこと
#plan
の配下にある、要素を取得して要素数分だけdocument.getElementById
を生成したい。
困っていること
要素数分だけ、document.getElementById
を生成する方法が分からない。
js
1let arr = []; 2for(let i=0;i<price_itme;i++){ 3 arr[i] = `document.getElementById(plan${i})`; 4} 5//=> ["document.getElementById(plan0)", "document.getElementById(plan1)"]
上記で、document. getElementByIdを生成することができました。
配列にdocumentを生成した場合、どのようにstyleを利かせばよいかご教示いただけると幸いです。
slim
1#plan 2 select#sample.form-control name="select" onchange="SendAjax(this);" 3 option value="plan" id="item" data-price="plan" 4 = 'item1' 5 option value="plan2" id="item2" data-price="plan2" 6 = 'item2' 7 option value="plan3" id="item3" data-price="plan3" 8 = 'item3' 9 10 input type="text" value="plan1" id="plan" 11 input type="text" value="plan2" id="plan1" 12 input type="text" value="plan3" id="plan2"
js
1//TODO: jsに書き換えたいな 2 var plan_item = $('#plan').children().length; 3 for(let i=0;i<plan_item;i++){ 4 //ここをどうにかしたい。 5 document.getElementById(`plan${i}`).style.display = "none"; 6 document.getElementById(`plan${i}`).style.display = "none"; 7 document.getElementById(`plan${i}`).style.display = "none"; 8 } 9 10 function SendAjax(obj) 11 { 12 // objはselectタグ 13 let idx = obj.selectedIndex; 14 let value = obj.options[idx].value // value 15 let text = obj.options[idx].text; // apper text 16 17 //ここもforで編集する予定 18 const txt1 = document.getElementById("item"); 19 const txt2 = document.getElementById("item2"); 20 const txt3 = document.getElementById("item3"); 21 22 23 if(value != txt1.id || value != txt2.id || value != txt3.id) 24 { 25 txt1.style.display = "none"; 26 txt2.style.display = "none"; 27 txt3.style.display = "none"; 28 } 29 if(value == txt1.id) 30 { 31 txt1.style.display = "block"; 32 } 33 if(value == txt2.id) 34 { 35 txt2.style.display = "block"; 36 } 37 if(value == txt3.id) 38 { 39 txt3.style.display = "block"; 40 } 41 42 console.log(`TEXT: ${text} / VALUE: ${value}`); 43 console.log(`txt_ID1: ${txt1.id}`); 44 }
#試していること
evalを使って、jsコードを生成しようとしたのですがシンタックスエラーになってしまいました。
もし原因についてお分かりでしたら、ご教示いただけると幸いです。
js
1for (var i = 0; i < 2; i++) { 2 eval("let arr" + i + "=" + "document.getElementById('" + `plan${i}` + "')" + ";"); 3} 4 5//=> arr0をすると下記のエラーになってしまいます。 6// VM546:1 Uncaught ReferenceError: arr0 is not defined 7// at <anonymous>:1:1

回答3件
あなたの回答
tips
プレビュー