JavaScript でリストから複数選択したものを上下ボタンで移動するコードを書きたいです。
ただ上下移動するものは書くことができましたが複数移動にするとうまく動作しません。
複数選択したものを上下に移動させる方法を教えてください。
実装したいもの
2と3を選択して下ボタンを押下
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
↓
<option value="1">1</option>
<option value="4">4</option>
<option value="2">2</option>
<option value="3">3</option>
3と5を選択して上ボタンを押した場合:
<option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> <option value="6">6</option> ↓ <option value="1">1</option> <option value="3">3</option> <option value="2">2</option> <option value="5">5</option> <option value="4">4</option> <option value="6">6</option>HTML
1<table> 2 <tr> 3 <td> 4 <select id="item-list" size="8" multiple="multiple"> 5 <option value="1">1</option> 6 <option value="2">2</option> 7 <option value="3">3</option> 8 <option value="4">4</option> 9 <option value="5">5</option> 10 </select> 11 </td> 12 <td> 13 <input type="button" value="↑" onclick="move('up');"> 14 <br/> 15 <input type="button" value="↓" onclick="move('down');"> 16 </td> 17 </tr> 18</table>
JavaScript
1 2function move(act) { 3 var s = document.getElementById("item-list"); 4 5 if(s.selectedIndex == -1) return; 6 7 var opt = s.options[s.selectedIndex]; 8 9 var opts = s.options; 10 11 for (let i = 0; i < opts.length; i++) { 12 if (opts[i].selected){ 13 console.log(opts[i].value); 14 15 if (act == 'up') { 16 if (s.options[s.selectedIndex-1]) { 17 s.insertBefore(opt, s.options[s.selectedIndex-1]); 18 } 19 } 20 21 if (act == 'down') { 22 if (s.options[s.selectedIndex+1]) { 23 s.insertBefore(opt, s.options[s.selectedIndex+1].nextSibling); 24 } 25 } 26 } 27 } 28} 29
回答2件
あなたの回答
tips
プレビュー