少しは速いかな?
option要素の移動が遅い
http://oshiete.goo.ne.jp/qa/8441116.html
ちょっと端折りすぎた感。
<!DOCTYPE html> <meta charset="utf-8"> <title></title> <body> <form action="#" onsubmit="check(event)"> <select id="a" multiple> <option value="a1">移動されない</option> <option value="b2">サンプル2</option> <option value="c3">サンプル3</option> </select> <select id="b" multiple> <option value="a1">サンプル1</option> <option value="a2">サンプル2</option> <option value="a3">サンプル3</option> </select> <input type="submit" value="test"> </form> <script> function A (a, op) { a[op.value] = op.text; return a; } function B (op) { return ! this.hasOwnProperty (op.value); } function C (op) { this.appendChild (op); } function moveSelectedOption (a, b) { Array.prototype.slice.call (a.querySelectorAll ('option:checked'), 0) .filter (B, Array.prototype.reduce.call (b.options, A, {})) .forEach (C, b); } function check (e) { var d = document; moveSelectedOption (d.querySelector('#a'), d.querySelector('#b')); return e.preventDefault(); } </script>
時間差で追加していく
でも、SELECT要素がフォーカスされている時に追加されたらどうなるん?
きっとそれは実装依存だろうな。
function moveSelectedOption (a, b) { var tm = 300;//ms var ct = 100;//n var op = Array.prototype.slice.call (a.querySelectorAll ('option:checked'), 0) .filter (B, Array.prototype.reduce.call (b.options, A, {})) var len = op.length; var i = 0; function LOOP () { for (var o, cnt = ct; cnt--; i++) if (o = op[i]) b.appendChild (o); else break; if (i < len) setTimeout (LOOP, tm); }; LOOP (); }