回答編集履歴

4

修正

2019/05/11 11:03

投稿

退会済みユーザー
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

解説になるかな?

2019/05/11 11:03

投稿

退会済みユーザー
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

修正

2019/05/11 11:01

投稿

退会済みユーザー
test CHANGED
@@ -18,9 +18,7 @@
18
18
 
19
19
  <tr>
20
20
 
21
- <td><a href=""><output name="id"></outpur></a>
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忘れてた

2019/05/05 11:16

投稿

退会済みユーザー
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