回答編集履歴

3

sample

2019/09/03 02:11

投稿

yambejp
yambejp

スコア114769

test CHANGED
@@ -33,3 +33,145 @@
33
33
 
34
34
 
35
35
  とすればよいのでは?
36
+
37
+
38
+
39
+ # sample
40
+
41
+ ちょっと面倒な処理がはいりますが概ねこんな感じ
42
+
43
+ ```javascript
44
+
45
+ <script>
46
+
47
+ 'use strict';
48
+
49
+ const searchNextId=todos=>{
50
+
51
+ var idx=todos.length;
52
+
53
+ var ids=todos.map(x=>x.id).sort();
54
+
55
+ for(var i=0;i<ids.length;i++){
56
+
57
+ if(ids[i]!==i){
58
+
59
+ idx=i;
60
+
61
+ break;
62
+
63
+ }
64
+
65
+ }
66
+
67
+ return idx;
68
+
69
+ };
70
+
71
+ window.addEventListener('DOMContentLoaded', ()=>{
72
+
73
+ const inputContent = document.querySelector('#inputContent');
74
+
75
+ const todoList = document.querySelector('#todoList');
76
+
77
+ const todos = [];
78
+
79
+ document.querySelector('#addButton').addEventListener('click', () => {
80
+
81
+ const id = searchNextId(todos);
82
+
83
+ const comment = inputContent.value;
84
+
85
+ const remove = '削除';
86
+
87
+ const task = {id,comment,remove};
88
+
89
+ todos.push(task);
90
+
91
+ let tr = document.createElement('tr');
92
+
93
+ tr.classList.add('addTr');
94
+
95
+ let td = document.createElement('td');
96
+
97
+ td.classList.add('id');
98
+
99
+ td.textContent = id;
100
+
101
+ tr.appendChild(td);
102
+
103
+ td = document.createElement('td');
104
+
105
+ td.classList.add('comment');
106
+
107
+ td.textContent = comment;
108
+
109
+ tr.appendChild(td);
110
+
111
+ td = document.createElement('td');
112
+
113
+ td.classList.add('remove');
114
+
115
+ let removeBtn = document.createElement('button');
116
+
117
+ removeBtn.textContent = remove;
118
+
119
+ td.appendChild(removeBtn);
120
+
121
+ tr.appendChild(td);
122
+
123
+ todoList.appendChild(tr);
124
+
125
+ removeBtn.addEventListener('click', e => {
126
+
127
+ const idx=Array.from(document.querySelectorAll('.remove button')).indexOf(e.target);
128
+
129
+ todos.splice(idx,1);
130
+
131
+ const element1 = e.target.closest('tr');
132
+
133
+ element1.parentNode.removeChild(element1);
134
+
135
+ console.log(todos);
136
+
137
+ });
138
+
139
+ console.log(todos);
140
+
141
+ });
142
+
143
+ });
144
+
145
+ </script>
146
+
147
+ <table>
148
+
149
+ <thead>
150
+
151
+ <tr>
152
+
153
+ <th class="id">ID</th>
154
+
155
+ <th class="comment">コメント</th>
156
+
157
+ <th class="remove"></th>
158
+
159
+ </tr>
160
+
161
+ </thead>
162
+
163
+ <tbody id="todoList">
164
+
165
+ </tbody>
166
+
167
+ </table>
168
+
169
+
170
+
171
+ <h2>リスト表示</h2>
172
+
173
+ <input type="text" id="inputContent">
174
+
175
+ <button id="addButton">追加</button>
176
+
177
+ ```

2

チョウセイ

2019/09/03 02:11

投稿

yambejp
yambejp

スコア114769

test CHANGED
@@ -10,7 +10,9 @@
10
10
 
11
11
 
12
12
 
13
- となっているのでからの配列をforEachで回しても無駄は?
13
+ となっているのでからの配列をforEachで回してるの何を取りたいのかわかりません。
14
+
15
+ (その後pushしているので2回目以降なにか取りたいのでしょうか?)
14
16
 
15
17
 
16
18
 

1

調整

2019/09/03 01:14

投稿

yambejp
yambejp

スコア114769

test CHANGED
@@ -22,7 +22,9 @@
22
22
 
23
23
  ```javascript
24
24
 
25
+ removeBtn.addEventListener('click', e => {
26
+
25
- const element1 = e.target.closest('tr');
27
+ const element1 = e.target.closest('tr');
26
28
 
27
29
  ```
28
30