回答編集履歴

4

テキスト修正

2020/06/07 05:56

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -14,8 +14,6 @@
14
14
 
15
15
  ```html
16
16
 
17
- <body>
18
-
19
17
  <span id="schedules"></span>
20
18
 
21
19
  <table>
@@ -52,8 +50,6 @@
52
50
 
53
51
  </table>
54
52
 
55
- </body>
56
-
57
53
  ```
58
54
 
59
55
 

3

テキスト修正

2020/06/07 05:55

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -142,7 +142,7 @@
142
142
 
143
143
 
144
144
 
145
- さらに、`index.html` のほうでは、`<table>` の行を書かないでおいて、`index.js` で行を追加することも考えられます。このようにすると、朝、昼、夜のほかに、新しい時間帯追加されたときも、修正箇所を最小限にすることができます。以下、この趣旨による修正版です。
145
+ さらに、`index.html` のほうでは、`<table>` の行を書かないでおいて、`index.js` で行を追加することも考えられます。このようにすると、朝、昼、夜のほかに、新しい時間帯追加ときも、修正箇所を最小限にすることができます。以下、この趣旨による修正版です。
146
146
 
147
147
 
148
148
 

2

テキスト修正

2020/06/07 05:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -285,3 +285,7 @@
285
285
  ];
286
286
 
287
287
  ```
288
+
289
+
290
+
291
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/XWXbEXX?editors=1010](https://codepen.io/jun68ykt/pen/XWXbEXX?editors=1010)

1

テキスト修正

2020/06/07 05:45

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -133,3 +133,155 @@
133
133
 
134
134
 
135
135
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/NWxqyBB?editors=1010](https://codepen.io/jun68ykt/pen/NWxqyBB?editors=1010)
136
+
137
+
138
+
139
+
140
+
141
+ ## 追記
142
+
143
+
144
+
145
+ さらに、`index.html` のほうでは、`<table>` の行を書かないでおいて、`index.js` で行を追加することも考えられます。このようにすると、朝、昼、夜のほかに、新しい時間帯が追加されたときも、修正箇所を最小限にすることができます。以下、この趣旨による修正版です。
146
+
147
+
148
+
149
+ ### index.html
150
+
151
+ ```html
152
+
153
+ <span id="schedules"></span>
154
+
155
+ <table>
156
+
157
+ </table>
158
+
159
+ ```
160
+
161
+ ### index.js
162
+
163
+ ```javascript
164
+
165
+ 'use strict';
166
+
167
+
168
+
169
+ // ???? https://stackoverflow.com/a/3291856
170
+
171
+ String.prototype.capitalize = function() {
172
+
173
+ return this.charAt(0).toUpperCase() + this.slice(1);
174
+
175
+ };
176
+
177
+
178
+
179
+ const PERIODS_OF_A_DAY = [
180
+
181
+ { name: "morning", label: "朝" },
182
+
183
+ { name: "noon", label: "昼" },
184
+
185
+ { name: "night", label: "夜" }
186
+
187
+ ];
188
+
189
+
190
+
191
+ function reload() {
192
+
193
+ const schedulesText = PERIODS_OF_A_DAY.map(({ name }) =>
194
+
195
+ localStorage.getItem(`ScheduleAt${name.capitalize()}`)
196
+
197
+ ).join('');
198
+
199
+ document.getElementById('schedules').textContent = schedulesText;
200
+
201
+ }
202
+
203
+
204
+
205
+ function save(name) {
206
+
207
+ const { value } = document.getElementById(`scheduleat${name}`);
208
+
209
+ const key = `ScheduleAt${name.capitalize()}`;
210
+
211
+ localStorage.setItem(key, value);
212
+
213
+ reload();
214
+
215
+ }
216
+
217
+
218
+
219
+ const tableRow = ({name, label}) =>
220
+
221
+ `<tr>
222
+
223
+ <th>${label}</th>
224
+
225
+ <td><textarea id="scheduleat${name}" cols="30" rows="3"></textarea></td>
226
+
227
+ <td><input type="button" value="保存${label}" onclick="save('${name}')" ></td>
228
+
229
+ </tr>`;
230
+
231
+
232
+
233
+ document.addEventListener('DOMContentLoaded', function() {
234
+
235
+ const table = document.querySelector('table');
236
+
237
+ table.innerHTML = PERIODS_OF_A_DAY.map(tableRow).join('');
238
+
239
+ reload();
240
+
241
+ });
242
+
243
+
244
+
245
+ ```
246
+
247
+
248
+
249
+ 上記のコードにある、以下の定数 `PERIODS_OF_A_DAY`
250
+
251
+
252
+
253
+ ```javascript
254
+
255
+ const PERIODS_OF_A_DAY = [
256
+
257
+ { name: "morning", label: "朝" },
258
+
259
+ { name: "noon", label: "昼" },
260
+
261
+ { name: "night", label: "夜" }
262
+
263
+ ];
264
+
265
+ ```
266
+
267
+ に、たとえば以下のように、夕方と深夜を追加すると、これらに対応した行が追加されます。
268
+
269
+
270
+
271
+ ```javascript
272
+
273
+ const PERIODS_OF_A_DAY = [
274
+
275
+ { name: "morning", label: "朝" },
276
+
277
+ { name: "noon", label: "昼" },
278
+
279
+ { name: "evening", label: "夕方" },
280
+
281
+ { name: "night", label: "夜" },
282
+
283
+ { name: "midnight", label: "深夜" },
284
+
285
+ ];
286
+
287
+ ```