teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

5

誤字

2020/04/25 11:10

投稿

aki_
aki_

スコア18

title CHANGED
File without changes
body CHANGED
@@ -97,7 +97,7 @@
97
97
  const allDelBtn = document.getElementById('allDelBtn');
98
98
  const inputText= document.getElementById('inputText');
99
99
      //エスケープ処理
100
- function text (str){
100
+ function escText (str){
101
101
  return String(str).replace(/&/g,"&")
102
102
  .replace(/"/g,""")
103
103
  .replace(/</g,"&lt;")
@@ -116,7 +116,7 @@
116
116
  todos.insertAdjacentHTML('beforeend',
117
117
  `<ul class="listGroup__item todos__item">
118
118
  <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
119
- <li class="todo__task">${text(inputText.value)}</li>
119
+ <li class="todo__task">${escText(inputText.value)}</li>
120
120
  <li class="delete"></li>
121
121
  </ul>`)
122
122
  ;

4

文法の修正

2020/04/25 11:10

投稿

aki_
aki_

スコア18

title CHANGED
File without changes
body CHANGED
@@ -96,6 +96,7 @@
96
96
  const list = document.getElementById('todos');
97
97
  const allDelBtn = document.getElementById('allDelBtn');
98
98
  const inputText= document.getElementById('inputText');
99
+     //エスケープ処理
99
100
  function text (str){
100
101
  return String(str).replace(/&/g,"&amp;")
101
102
  .replace(/"/g,"&quot;")
@@ -111,7 +112,7 @@
111
112
 
112
113
  function createTodoList () {
113
114
  // HTMLテンプレートを生成
114
-
115
+ //inputText.valueに対して、エスケープ処理関数を用いる
115
116
  todos.insertAdjacentHTML('beforeend',
116
117
  `<ul class="listGroup__item todos__item">
117
118
  <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>

3

文法の修正

2020/04/25 11:05

投稿

aki_
aki_

スコア18

title CHANGED
File without changes
body CHANGED
@@ -163,4 +163,5 @@
163
163
  });
164
164
 
165
165
 
166
+ }
166
- } ```
167
+ ```

2

回答について追記

2020/04/25 11:03

投稿

aki_
aki_

スコア18

title CHANGED
File without changes
body CHANGED
@@ -84,6 +84,83 @@
84
84
  }
85
85
 
86
86
  ```
87
+ ※コンソールにもエラーが表示されないことを確認しております。
87
88
 
89
+ 追記
90
+ 自己解決したわけではないのでこちらに書かせていただきます。
91
+ ありがとうございました!
92
+ ```JavaScript
93
+ 'use strict'
94
+ {
95
+ const addTask = document.getElementById('add');
96
+ const list = document.getElementById('todos');
97
+ const allDelBtn = document.getElementById('allDelBtn');
98
+ const inputText= document.getElementById('inputText');
99
+ function text (str){
100
+ return String(str).replace(/&/g,"&amp;")
101
+ .replace(/"/g,"&quot;")
102
+ .replace(/</g,"&lt;")
103
+ .replace(/>/g,"&gt;")
104
+ .replace(/>/g,"&gt;")
105
+ .replace(///g, "&#047;")
106
+ }
88
107
 
108
+ addTask.addEventListener('submit', e => {
109
+ // デフォルトのイベントを無効
110
+ e.preventDefault();
111
+
112
+ function createTodoList () {
113
+ // HTMLテンプレートを生成
114
+
115
+ todos.insertAdjacentHTML('beforeend',
116
+ `<ul class="listGroup__item todos__item">
117
+ <li class="todo__checkbox"><input type="checkbox" name="taskcheck" ></li>
118
+ <li class="todo__task">${text(inputText.value)}</li>
119
+ <li class="delete"></li>
120
+ </ul>`)
121
+ ;
122
+
89
- ※コンソールにもエラーが表示されないこと確認しておます。
123
+ //チェックつけると取消し線が入る
124
+ //document.querySelectorAllメソッドで一つでもリストとして取得することが可能
125
+ //for文で回すことで、全ての中からcheckedになったもののみ取り消し線をつけることができる。
126
+ //外すことも可能
127
+ const taskCheck = document.querySelectorAll("input[type='checkbox']");
128
+ for(let i = 0; i < taskCheck.length; i++){
129
+ taskCheck[i].addEventListener('click', () => {
130
+ if(taskCheck[i].checked){
131
+ taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'line-through';
132
+ } else {
133
+ taskCheck[i].parentNode.nextElementSibling.style.textDecoration = 'none';
134
+ }
135
+ });
136
+ }
137
+ //なお、allDelBtnを押すことでチェックがついたもののみ全て消すことも可能
138
+ allDelBtn.addEventListener('click', e =>{
139
+ for(let i = 0; i < taskCheck.length; i++){
140
+ if(taskCheck[i].checked=== true){
141
+ taskCheck[i].parentElement.parentElement.remove();
142
+ }
143
+ }
144
+ })
145
+ }
146
+
147
+ // タスクに入力した値を空白を除外して格納
148
+ const task = addTask.add.value.trim();
149
+ if(task.length) {
150
+ // Todo List の HTML を生成
151
+ createTodoList(task);
152
+ // タスクに入力した文字をクリア
153
+ addTask.reset();
154
+ }
155
+ });
156
+
157
+ //一つずつゴミ箱で削除することも可能。deleteがクラスについている場合(つまりゴミ箱)。
158
+ //親要素もろとも消し去る。JavaScriptで生成されたアイテムのためこのような記述になる
159
+ list.addEventListener('click', e => {
160
+ if (e.target.classList.contains('delete')){
161
+ e.target.parentElement.remove();
162
+ }
163
+ });
164
+
165
+
166
+ } ```

1

文章の修正

2020/04/25 10:59

投稿

aki_
aki_

スコア18

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  ##試したこと
5
5
  一つだけ作成しようとすると最後に入力した文字列しか表示されなくなってしまい、他のタスクの文字は消えてしまうため、
6
- for文で回してみたのですが、全てのタスクが最後に入力した文字列
6
+ for文で回してみたのですが、全てのタスクが最後に入力した文字列に変更されてしまいます。
7
7
 
8
8
  ##現象が発生しているTodoリスト
9
9
  http://nakatakira.html.xdomain.jp/test/test5/