Selectをコピーするには?
ちょっと今日はjQueryなるものをさわった。
何がやりたいかと言うと、HTMLタグのSELECTってのがあるんだが、ボタンを押したら、そのSELECTをOPTIONごとコピーしたい。ってのを作りたいんだわ。いろいろネットを徘徊してたら「clone()」ってのがあり、それがコピーを行うようなので利用してみたらできたわけよ。
そこまではいいとして、ではSELECTが複数あった場合、そのSELECTに付属するボタンを押したとき、対象のSELECTをコピーするようにしたいのだが、とまた考えて作ってみた。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <script type="text/javascript" src="./jquery.js"></script> <script type="text/javascript"> <!-- $(document).ready(function(){ $("input").click(function(){ if ( $(this).attr("type") === 'button' ){ var num = ( $(this).attr("id").split(/_/) )[1]; var keyId = "#team_" + num; var area = "#area_" + num; $(area).after("<br>"); $(keyId).clone().insertAfter(area); } }); }); //--> </script> </head> <body> <table> <tr><td> <select id="team_1" style="width:150px"> <option value="1">読売ジャイアンツ</option> <option value="2">中日ドラゴンズ</option> <option value="3">阪神タイガース</option> <option value="4">ヤクルトスワローズ</option> <option value="5">広島カープ</option> <option value="6">横浜ベイスターズ</option> </select> <div id="area_1"></div> </td><td> <input id="btn_1" type="button" value="追加"> </td></tr><tr><td> <select id="team_2" style="width:150px"> <option value="1">日本ハムファイターズ</option> <option value="2">楽天イーグルス</option> <option value="3">ソフトバンクフォークス</option> <option value="4">西武ライオンズ</option> <option value="5">千葉ロッテマリーンズ</option> <option value="6">オリックスブルーウェーブ</option> </select> <div id="area_2"></div> </td><td> <input id="btn_2" type="button" value="追加"> </td></tr> </table> </body> </html>
問題なく考えているように動いたのでいいのかな〜と思うんだけど、でもね、なんだか微妙な気がする。もっと上手な方法があるんじゃないかなと、例えば、それぞれ、○○_1、○○_2としているけど、そんなことする必要はなくボタンを押したら、どの場所のボタンが押されて、そのボタンに付随するSELECTはこれで、簡単に複製できますよ。見たいに、もっとエレガントにできそうなんだけど。どうなんだろう。例にあげたものは対象が2つしかないから問題は発生しないけど、例えばSELECTが100個とかあれば○○_1、○○_2、○○_100等々関連が大変になってこないかな?メンテとかを考えると今以上にうまいやり方があればいいのだが・・・まあプログラム側で100までループさせるので問題ないが、○○_1〜○○_100と数多くあるのが気持ち悪い。
もっとエレガントにできれば最高だと思う。では