• Source
    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>