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