だいたい以下のような構成のhtmlとjavascriptがあったとして、
eleColの部分を、inpColを使って生み出したいのです。
const inpCol = document.getElementsByTagName("input");
の「inpCol」を使った記述で、
const eleCol = document.getElementsByName("test");
と同等のeleColを導き出したい。
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>radio_check_test</title> 6</head> 7<body> 8 <input type="number"><br> 9 <input type="number"><br> 10 <input type="number"><br> 11 <input type="number"><br> 12 <input type="number"><br> 13 14 <input type="radio" name="test" value="val1">radio1 15 <input type="radio" name="test" value="val2">radio2 16 <input type="radio" name="test" value="val3">radio3 17 <br> 18 19 <input type="number"><br> 20 <input type="number"><br> 21 <input type="number"> 22 23 <div id="disp"></div> 24 25<script src="main.js"></script> 26</body> 27</html> 28
javascript
1"use strict"; 2 3const inpCol = document.getElementsByTagName("input"); 4const divCol = document.getElementsByTagName("div"); 5 6// ---------------------------------- 7function rClick() { 8 // const eleCol = document.getElementsByName("test"); 9 // と同じeleColをinpColから生み出したい 10 11 const eleCol = []; // <= ここから 12 let j = 0; 13 for (let i = 0; i < inpCol.length; i++) { 14 if (inpCol[i].name === "test") { 15 eleCol[j] = inpCol[i]; 16 j++; 17 } 18 } // <= ここまでの追加作業がなんとなく切ない 19 20 let txt = ""; 21 for (let i = 0; i < eleCol.length; i++) { 22 if (eleCol[i].checked) { 23 txt = eleCol[i].value; 24 break; 25 } 26 } 27 divCol["disp"].textContent = txt; 28} 29 30// ---------------------------------- 31document.addEventListener("click", () => { 32 rClick(); 33});
(以上のソースだけ見て
const eleCol = document.getElementsByName("test");
でいいじゃん、という回避法は無しでお願いします。)
例えばdivColの部分において
const disp = document.getElementById("disp");
disp.textContent = txt;
みたいな置換を使わずに、既にあるdivColによって
divCol["disp"]という記述で済ませられたのは助かりました。
こういった書き方があればと思います。
const eleCol = inpCol["test"];
ではダメなんですよね。
上記の通り、まともにfor文とif文でまわす方法なら書けましたが
こんな大袈裟な事をしなくちゃいけないのでしょうか。
もっと単純な書き方があるのではと思います。
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー