events.php.gr.jpの参加者リストを名前でソートする
受付などで、参加者のリストを印刷して使いたい。でもそのままでなく名前でソートしたものを印刷するためのjQuery。
<script type="text/javascript"> $(function(){ // Member Object function Member(name, tr) { this.name = name; this.tr = tr; } // click action $("#sort_name").click(function(){ var header; var lines = $("tr").filter(function(i){ if (i == 0) header = this; return $(this).is(".odd") || $(this).is(".even") || $(this).is(".canceled"); }); var s = new Array(); $.each(lines, function(i, n){ s[i] = new Member($(n).children("td:first").text(), n); }); s.sort(function(a, b){ return a.name.toLowerCase().localeCompare(b.name.toLowerCase()); }); // add check and memo cols header $(header).find("th:first").before("<th>check</th>"); $(header).find("th:last").after("<th>memo</th>"); // append to table $("table").empty(); $(header).appendTo("table"); $.each(s, function(i, n){ $(n.tr).find("td:first").before("<td></td>"); $(n.tr).find("td:last").after("<td class='memo'></td>"); $(n.tr).appendTo("table"); }); }); }); </script>
eventsページの参加者リストだけがtableなので、その部分を取得してガリガリしてます。
あとは、このJavascriptをトリガーするためのボタンを用意します。
<input type="button" value="名前で並び替え" id="sort_name">
もともとはエクセルで貼付けでいいやーと思ってたのですが、直前でキャンセルとかあった場合に、わからなくなるよとアドバイスを頂いたので、だったら直接書き換えちゃえばどうだろうと。
そして、ついでだから、チェック欄とメモ欄も作っちゃえと。
ただ、上記ソースをeventsのページに直接書き込むことができないので、ローカル環境でiframeを使ってtableタグだけをとって加工、表示するよにしました。
で、ローカルで実行した結果が以下。
でも、どうやって開場直前に印刷するかを考えてなかった。。そっちのほうが大事なのに。