回答編集履歴

1

ついか

2021/09/16 00:46

投稿

yambejp
yambejp

スコア114747

test CHANGED
@@ -65,3 +65,105 @@
65
65
  </table>
66
66
 
67
67
  ```
68
+
69
+
70
+
71
+ # 昇順/降順切り替え
72
+
73
+ ```javascript
74
+
75
+ <style>
76
+
77
+ .asc:after{
78
+
79
+ font-size:0.7em;
80
+
81
+ content:"▲";
82
+
83
+ }
84
+
85
+ .desc:after{
86
+
87
+ font-size:0.7em;
88
+
89
+ content:"▼";
90
+
91
+ }
92
+
93
+ </style>
94
+
95
+ <script>
96
+
97
+ window.addEventListener('DOMContentLoaded', ()=>{
98
+
99
+ document.querySelector('.sort-table th:first-child').classList.add('asc');
100
+
101
+ document.querySelectorAll('.sort-table th').forEach(x=>{
102
+
103
+ x.addEventListener('click',()=>{
104
+
105
+ let y=document.querySelector('.sort-table th.asc,.sort-table th.desc');
106
+
107
+ if(x!==y) y?.classList.remove('asc','desc');
108
+
109
+ x.classList.toggle('desc',x.classList.contains('asc'));
110
+
111
+ x.classList.toggle('asc');
112
+
113
+ const idx=[...x.parentNode.children].indexOf(x);
114
+
115
+ const tbody=x.closest('table').querySelector('tbody');
116
+
117
+ [...tbody.querySelectorAll('tr')].sort((y,z)=>{
118
+
119
+ const ty=y.querySelector(`td:nth-child(${idx+1})`).textContent;
120
+
121
+ const tz=z.querySelector(`td:nth-child(${idx+1})`).textContent;
122
+
123
+ return (ty==tz?0:(ty>tz?1:-1))*(x.classList.contains('asc')?1:-1);
124
+
125
+ }).forEach(x=>tbody.appendChild(x));
126
+
127
+ });
128
+
129
+ });
130
+
131
+ });
132
+
133
+ </script>
134
+
135
+ <table class="sort-table">
136
+
137
+ <thead>
138
+
139
+ <tr>
140
+
141
+ <th>番号</th>
142
+
143
+ <th>名前</th>
144
+
145
+ <th>生年月日</th>
146
+
147
+ <th>成績</th>
148
+
149
+ </tr>
150
+
151
+ </thead>
152
+
153
+ <tbody>
154
+
155
+ <tr><td>1</td><td>田中太郎</td><td> 8月12日</td><td> 95点</td></tr>
156
+
157
+ <tr><td>2</td><td>鈴木一郎</td><td> 3月 3日</td><td>100点</td></tr>
158
+
159
+ <tr><td>3</td><td>佐藤二朗</td><td>12月12日</td><td> 75点</td></tr>
160
+
161
+ <tr><td>4</td><td>吉田三郎</td><td> 6月 6日</td><td> 60点</td></tr>
162
+
163
+ <tr><td>5</td><td>東川夏葉</td><td> 1月 4日</td><td> 80点</td></tr>
164
+
165
+ </tbody>
166
+
167
+ </table>
168
+
169
+ ```