質問編集履歴

5

誤字

2020/04/25 11:10

投稿

aki_
aki_

スコア18

test CHANGED
File without changes
test CHANGED
@@ -196,7 +196,7 @@
196
196
 
197
197
      //エスケープ処理
198
198
 
199
- function text (str){
199
+ function escText (str){
200
200
 
201
201
  return String(str).replace(/&/g,"&")
202
202
 
@@ -234,7 +234,7 @@
234
234
 
235
235
  <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
236
236
 
237
- <li class="todo__task">${text(inputText.value)}</li>
237
+ <li class="todo__task">${escText(inputText.value)}</li>
238
238
 
239
239
  <li class="delete"></li>
240
240
 

4

文法の修正

2020/04/25 11:10

投稿

aki_
aki_

スコア18

test CHANGED
File without changes
test CHANGED
@@ -194,6 +194,8 @@
194
194
 
195
195
  const inputText= document.getElementById('inputText');
196
196
 
197
+     //エスケープ処理
198
+
197
199
  function text (str){
198
200
 
199
201
  return String(str).replace(/&/g,"&amp;")
@@ -224,24 +226,24 @@
224
226
 
225
227
  // HTMLテンプレートを生成
226
228
 
229
+ //inputText.valueに対して、エスケープ処理関数を用いる
230
+
231
+ todos.insertAdjacentHTML('beforeend',
232
+
233
+ `<ul class="listGroup__item todos__item">
234
+
235
+ <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
236
+
237
+ <li class="todo__task">${text(inputText.value)}</li>
238
+
239
+ <li class="delete"></li>
240
+
241
+ </ul>`)
242
+
243
+ ;
244
+
227
245
 
228
246
 
229
- todos.insertAdjacentHTML('beforeend',
230
-
231
- `<ul class="listGroup__item todos__item">
232
-
233
- <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
234
-
235
- <li class="todo__task">${text(inputText.value)}</li>
236
-
237
- <li class="delete"></li>
238
-
239
- </ul>`)
240
-
241
- ;
242
-
243
-
244
-
245
247
  //チェックをつけると取り消し線が入る
246
248
 
247
249
  //document.querySelectorAllメソッドで一つでもリストとして取得することが可能

3

文法の修正

2020/04/25 11:05

投稿

aki_
aki_

スコア18

test CHANGED
File without changes
test CHANGED
@@ -328,4 +328,6 @@
328
328
 
329
329
 
330
330
 
331
+ }
332
+
331
- } ```
333
+ ```

2

回答について追記

2020/04/25 11:03

投稿

aki_
aki_

スコア18

test CHANGED
File without changes
test CHANGED
@@ -170,8 +170,162 @@
170
170
 
171
171
  ```
172
172
 
173
-
174
-
175
-
176
-
177
173
  ※コンソールにもエラーが表示されないことを確認しております。
174
+
175
+
176
+
177
+ 追記
178
+
179
+ 自己解決したわけではないのでこちらに書かせていただきます。
180
+
181
+ ありがとうございました!
182
+
183
+ ```JavaScript
184
+
185
+ 'use strict'
186
+
187
+ {
188
+
189
+ const addTask = document.getElementById('add');
190
+
191
+ const list = document.getElementById('todos');
192
+
193
+ const allDelBtn = document.getElementById('allDelBtn');
194
+
195
+ const inputText= document.getElementById('inputText');
196
+
197
+ function text (str){
198
+
199
+ return String(str).replace(/&/g,"&amp;")
200
+
201
+ .replace(/"/g,"&quot;")
202
+
203
+ .replace(/</g,"&lt;")
204
+
205
+ .replace(/>/g,"&gt;")
206
+
207
+ .replace(/>/g,"&gt;")
208
+
209
+ .replace(///g, "&#047;")
210
+
211
+ }
212
+
213
+
214
+
215
+ addTask.addEventListener('submit', e => {
216
+
217
+ // デフォルトのイベントを無効
218
+
219
+ e.preventDefault();
220
+
221
+
222
+
223
+ function createTodoList () {
224
+
225
+ // HTMLテンプレートを生成
226
+
227
+
228
+
229
+ todos.insertAdjacentHTML('beforeend',
230
+
231
+ `<ul class="listGroup__item todos__item">
232
+
233
+ <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
234
+
235
+ <li class="todo__task">${text(inputText.value)}</li>
236
+
237
+ <li class="delete"></li>
238
+
239
+ </ul>`)
240
+
241
+ ;
242
+
243
+
244
+
245
+ //チェックをつけると取り消し線が入る
246
+
247
+ //document.querySelectorAllメソッドで一つでもリストとして取得することが可能
248
+
249
+ //for文で回すことで、全ての中からcheckedになったもののみ取り消し線をつけることができる。
250
+
251
+ //外すことも可能
252
+
253
+ const taskCheck = document.querySelectorAll("input[type='checkbox']");
254
+
255
+ for(let i = 0; i < taskCheck.length; i++){
256
+
257
+ taskCheck[i].addEventListener('click', () => {
258
+
259
+ if(taskCheck[i].checked){
260
+
261
+ taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'line-through';
262
+
263
+ } else {
264
+
265
+ taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'none';
266
+
267
+ }
268
+
269
+ });
270
+
271
+ }
272
+
273
+ //なお、allDelBtnを押すことでチェックがついたもののみ全て消すことも可能
274
+
275
+ allDelBtn.addEventListener('click', e =>{
276
+
277
+ for(let i = 0; i < taskCheck.length; i++){
278
+
279
+ if(taskCheck[i].checked=== true){
280
+
281
+ taskCheck[i].parentElement.parentElement.remove();
282
+
283
+ }
284
+
285
+ }
286
+
287
+ })
288
+
289
+ }
290
+
291
+
292
+
293
+ // タスクに入力した値を空白を除外して格納
294
+
295
+ const task = addTask.add.value.trim();
296
+
297
+ if(task.length) {
298
+
299
+ // Todo List の HTML を生成
300
+
301
+ createTodoList(task);
302
+
303
+ // タスクに入力した文字をクリア
304
+
305
+ addTask.reset();
306
+
307
+ }
308
+
309
+ });
310
+
311
+
312
+
313
+ //一つずつゴミ箱で削除することも可能。deleteがクラスについている場合(つまりゴミ箱)。
314
+
315
+ //親要素もろとも消し去る。JavaScriptで生成されたアイテムのためこのような記述になる
316
+
317
+ list.addEventListener('click', e => {
318
+
319
+ if (e.target.classList.contains('delete')){
320
+
321
+ e.target.parentElement.remove();
322
+
323
+ }
324
+
325
+ });
326
+
327
+
328
+
329
+
330
+
331
+ } ```

1

文章の修正

2020/04/25 10:59

投稿

aki_
aki_

スコア18

test CHANGED
File without changes
test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  一つだけ作成しようとすると最後に入力した文字列しか表示されなくなってしまい、他のタスクの文字は消えてしまうため、
10
10
 
11
- for文で回してみたのですが、全てのタスクが最後に入力した文字列
11
+ for文で回してみたのですが、全てのタスクが最後に入力した文字列に変更されてしまいます。
12
12
 
13
13
 
14
14