回答編集履歴
4
修正
test
CHANGED
@@ -126,7 +126,7 @@
|
|
126
126
|
|
127
127
|
|
128
128
|
|
129
|
-
//最初の tbody 要素があれば削除する(一度しか行われないのであれば不要)
|
129
|
+
//最初の tbody 要素以外があれば削除する(一度しか行われないのであれば不要)
|
130
130
|
|
131
131
|
other.forEach (e => e.remove ());//tbdoy 削除
|
132
132
|
|
3
解説になるかな?
test
CHANGED
@@ -83,3 +83,95 @@
|
|
83
83
|
|
84
84
|
|
85
85
|
```
|
86
|
+
|
87
|
+
まずは謝らないと。css が抜けていた。
|
88
|
+
|
89
|
+
表の tbody は複数置ける。最初の tbody は、雛形にするので隠しておく
|
90
|
+
|
91
|
+
```css
|
92
|
+
|
93
|
+
#sample tbody:first-of-type { display: none; }
|
94
|
+
|
95
|
+
```
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
あとは解説。
|
100
|
+
|
101
|
+
```Javascript
|
102
|
+
|
103
|
+
let
|
104
|
+
|
105
|
+
//基準となるテーブル,そのテーブルの子要素である tbody を取得する
|
106
|
+
|
107
|
+
//tbody は、複数ある可能性があり、なおかつ最初の tbody は雛形にするので
|
108
|
+
|
109
|
+
//区別して取得する
|
110
|
+
|
111
|
+
[table, first, ...other] = document.querySelectorAll ('#sample, #sample tbody'),
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
//新たに追加する tbody を作っておく
|
116
|
+
|
117
|
+
newTbody = table.appendChild (document.createElement ('tbody')),
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
//雛形となる tbody の最初の tr 要素を取得する。(tr 自身も雛形にする)
|
122
|
+
|
123
|
+
//のちにこの子要素に含まれる output 要素を取得しやすいようにするため
|
124
|
+
|
125
|
+
tr = first.querySelector ('tr');
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
//最初の tbody 要素があれば削除する(一度しか行われないのであれば不要)
|
130
|
+
|
131
|
+
other.forEach (e => e.remove ());//tbdoy 削除
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
//配列(JSONデータ)から行部分を作る
|
136
|
+
|
137
|
+
ary.forEach (row => { //row は1行分のデータ
|
138
|
+
|
139
|
+
let
|
140
|
+
|
141
|
+
//雛形の tr 要素のクローンを作って(子要素もすべて含む)新たに作った tbody に追加する
|
142
|
+
|
143
|
+
tr_ = newTbody.appendChild (tr.cloneNode (true)),
|
144
|
+
|
145
|
+
|
146
|
+
|
147
|
+
//雛形(tr)にある要素(a, output)を取り出す
|
148
|
+
|
149
|
+
//別々に取得するのが面倒なので一度に取得する。
|
150
|
+
|
151
|
+
//(順番は a要素が最初というのが保証されていそうだから)
|
152
|
+
|
153
|
+
[a, ...output] = tr_.querySelectorAll ('a, output');
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
//output 要素の名前と同じ row オブジェクトから値を取り出し output 要素の値とする
|
158
|
+
|
159
|
+
// 最後の || '' は、 row[e.name] がゼロまたは、null の時には空文字にする
|
160
|
+
|
161
|
+
Array.from (output, e => e.value = row[e.name] || '');
|
162
|
+
|
163
|
+
//outoput は配列なのだから以下でもよかった。コード文字数がちょっと減る
|
164
|
+
|
165
|
+
//output.forEach (e => e.value = row[e.name] || '');
|
166
|
+
|
167
|
+
|
168
|
+
|
169
|
+
//アンカー要素は特別なので、href 属性に値を代入する
|
170
|
+
|
171
|
+
a.href=row.id + '.php';
|
172
|
+
|
173
|
+
});
|
174
|
+
|
175
|
+
```
|
176
|
+
|
177
|
+
おわかりいただけただろうか。
|
2
修正
test
CHANGED
@@ -18,9 +18,7 @@
|
|
18
18
|
|
19
19
|
<tr>
|
20
20
|
|
21
|
-
<td><a href=""><output name="
|
21
|
+
<td><a href=""><output name="name"></output></a>
|
22
|
-
|
23
|
-
<td><output name="name"></output>
|
24
22
|
|
25
23
|
<td><output name="grade"></output>
|
26
24
|
|
1
HTML忘れてた
test
CHANGED
@@ -2,7 +2,37 @@
|
|
2
2
|
|
3
3
|
後は、select で表示範囲を指定するだけ?
|
4
4
|
|
5
|
+
```HTML
|
5
6
|
|
7
|
+
<table id="sample" class="table table-bordered table-hover table-responsive table-sm">
|
8
|
+
|
9
|
+
<thead>
|
10
|
+
|
11
|
+
<tr class="table-primary">
|
12
|
+
|
13
|
+
<th>氏名 <th>学年 <th>年齢 <th>身長
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
<tbody>
|
18
|
+
|
19
|
+
<tr>
|
20
|
+
|
21
|
+
<td><a href=""><output name="id"></outpur></a>
|
22
|
+
|
23
|
+
<td><output name="name"></output>
|
24
|
+
|
25
|
+
<td><output name="grade"></output>
|
26
|
+
|
27
|
+
<td><output name="age"></output>
|
28
|
+
|
29
|
+
<td><output name="height"></output>
|
30
|
+
|
31
|
+
</tbody>
|
32
|
+
|
33
|
+
</table>
|
34
|
+
|
35
|
+
```
|
6
36
|
|
7
37
|
```javascript
|
8
38
|
|