fork(1) download
  1. <script>
  2.  
  3. addEventListener('DOMContentLoaded', function() {
  4.  
  5. document.querySelector('#number').addEventListener('click', function () {mySort('number')})
  6. document.querySelector('#name' ).addEventListener('click', function () {mySort('name') })
  7.  
  8. })
  9.  
  10.  
  11. function mySort(type) {
  12.  
  13. var types = ['number', 'name']
  14. type = types.indexOf(type)
  15.  
  16. var trs = document.querySelectorAll('table tbody tr')
  17. var cols = types.map(function (_, i) {return [].map.call(trs, function (tr) {return tr.querySelectorAll('td')[i]}) })
  18. var rows = [].map.call(trs, function (tr) {return tr.querySelectorAll('td')})
  19. var texts = [].map.call(rows, function (tds) {return [].map.call(tds, function (td) {return td.textContent})})
  20.  
  21. function observer(recs) {
  22. recs.forEach(function (rec) {
  23. cols.forEach(function (tds, i) {
  24. tds[rec.name].textContent = texts[rec.name][i]
  25. })
  26. })
  27. }
  28.  
  29. Object.observe(texts, observer);
  30.  
  31. texts.sort(function (a, b) {
  32. Object.deliverChangeRecords(observer)
  33. return a[type].localeCompare(b[type], 'ja-u-kn-true')
  34. })
  35.  
  36. }
  37.  
  38. </script>
  39.  
  40.  
  41. <table>
  42. <thead>
  43. <tr>
  44. <th><button id="number">番号</button></th>
  45. <th><button id="name">名前</button></th>
  46. </tr>
  47. </thead>
  48. <tbody>
  49. <tr><td>1</td><td>イケル・カシージャス</td></tr>
  50. <tr><td>2</td><td>ラファエル・ヴァラン</td></tr>
  51. <tr><td>3</td><td>ペペ</td></tr>
  52. <tr><td>4</td><td>セルヒオ・ラモス</td></tr>
  53. <tr><td>5</td><td>ファビオ・コエントラン</td></tr>
  54. <tr><td>6</td><td>サミ・ケディラ</td></tr>
  55. <tr><td>7</td><td>クリスティアーノ・ロナウド</td></tr>
  56. <tr><td>9</td><td>カリム・ベンゼマ</td></tr>
  57. <tr><td>11</td><td>ガレス・ベイル</td></tr>
  58. <tr><td>12</td><td>マルセロ</td></tr>
  59. <tr><td>13</td><td>ヘスス・フェルナンデス</td></tr>
  60. <tr><td>14</td><td>シャビ・アロンソ</td></tr>
  61. <tr><td>15</td><td>ダニエル・カルバハル</td></tr>
  62. <tr><td>16</td><td>カゼミーロ</td></tr>
  63. <tr><td>17</td><td>アルバロ・アルベロア</td></tr>
  64. <tr><td>18</td><td>ナチョ</td></tr>
  65. <tr><td>19</td><td>ルカ・モドリッチ</td></tr>
  66. <tr><td>20</td><td>ヘセ・ロドリゲス</td></tr>
  67. <tr><td>21</td><td>アルバロ・モラタ</td></tr>
  68. <tr><td>22</td><td>アンヘル・ディ・マリア</td></tr>
  69. <tr><td>23</td><td>イスコ</td></tr>
  70. <tr><td>24</td><td>アシエル・イジャラメンディ</td></tr>
  71. <tr><td>25</td><td>ディエゴ・ロペス</td></tr>
  72. </tbody>
  73. </table>
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty