やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

JSでラジオボタンのタグ<radio>を作った

 簡単だった。DOM操作すればいいだけ。

成果物

before

<radio>
    <option value="m"></option>
    <option value="f"></option>
</radio>

after

<input type="radio" value="m" name="17736db99f5211" id="17736db99f5211">
<label for="17736db99f5211"></label>
<input type="radio" value="f" name="17736db99f5211" id="17736db99f5211-f">
<label for="17736db99f5211-f"></label>

前回

 <input type"radio">というタグがクソだとわかった。

<radio>タグを自作する

 HTMLに書かれた<radio>というタグを、JSで<input>タグに書き換える。

before

<radio>
    <option value="m"></option>
    <option value="f"></option>
</radio>

after

<input type="radio" value="m" name="17736db99f5211" id="17736db99f5211">
<label for="17736db99f5211"></label>
<input type="radio" value="f" name="17736db99f5211" id="17736db99f5211-f">
<label for="17736db99f5211-f"></label>

 変換は以下APIで行う。

Radio.parse();

 これを開始時に呼び出せばいい。以下のように。

window.addEventListener('load', (event) => {
    Radio.parse();
});

 最小限の入力で、必要な項目を埋めてくれる。idはランダム値。

id

 idを指定する。

before

<radio id="sex1">
    <option value="m"></option>
    <option value="f"></option>
</radio>

after

<input type="radio" value="m" name="sex1" id="sex1-m">
<label for="sex1-m"></label>
<input type="radio" value="f" name="sex1" id="sex1-f">
<label for="sex1-f"></label>

 <input>idは、<radio>id+<option>valueである。

name

 idの末尾をnameにする。

<radio id="color" label="色">
    <option value="white" selected="false"></option>
    <option value="black"></option>
    <option value="#FA49AB" name="picker"><input type="color" disabled></option>
</radio>
<input type="radio" checked="true" value="white" name="color" id="color-white">
<label for="color-white"></label>
<input type="radio" value="black" name="color" id="color-black">
<label for="color-black"></label>
<input type="radio" value="#FA49AB" name="color" id="color-picker">
<label for="color-picker"><input type="color" disabled=""></label>
<radio><option><input>
idvaluenameidname
ないあるない{random}-{value}{random}
ないあるある{random}-{name}{random}
あるあるない{id}-{value}{id}
あるあるある{id}-{name}{id}
あるないない{id}-{random}{id}
ないないない{random1}-{random2}{random1}

 <option>valueかtextNodeの少なくとも1つが必要。

<option><input>
valuetextNodevalue
ないないError('<option>にはvalue属性またはtextNodeが必要です。')
あるない<input value="{value}">
あるある<input value="{value}">
ないある<input value="{textNode}">

対象環境

$ uname -a
Linux raspberrypi 5.4.83-v7l+ #1379 SMP Mon Dec 14 13:11:54 GMT 2020 armv7l GNU/Linux