前提・実現したいこと
簡単なtodolistを作成しています。
そこで入力した値をtableを使用して出力しているのですがその値を消去する機能を実現したいです。しかし、出力はできたのですが消去がうまくいきません。removeChilidを使用して要素の消去を実装したのですがエラーが出てしまいました。tableのrow一列を消去したいです。どこがおかしいのでしょうか?
発生している問題・エラーメッセージ
Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'.
Nodeについて調べてみたのですが良い解答が得られませんでした。Node.jsが出てきてしまいます。Node.jsはフレームワークで今回のエラーとは関係ないのかなと思っています。
該当のソースコード
html
1<body> 2 <h1>todo list</h1> 3 <div> 4 <input type="text" id="item"> 5 <button type="button" id='click-function'>Add</button> 6 </div> 7 8 <table> 9 <thead> 10 <tr> 11 <th>ID</th><th>コメント</th><th>状態</th><th></th> 12 </tr> 13 </thead> 14 <tbody id="list_item"> 15 16 </tbody> 17 </table> 18 <script src="index.js"></script> 19</body>
js
1const myfunc = document.getElementById('click-function'); 2let count = 0; 3myfunc.addEventListener('click',function(){ 4 let todoItems = []; 5 let todoItem = document.getElementById('item').value; 6 todoItems.push(todoItem); 7 todoItems.forEach((element,index,array) => { 8 const btn_1 = document.createElement('button'); 9 const btn_2 = document.createElement('button'); 10 btn_1.textContent = '作業中'; 11 btn_2.textContent = '消去'; 12 btn_2.type = 'button'; 13 btn_2.id = 'delete-' + count; 14 const td_1 = document.createElement('td'); 15 const td_2 = document.createElement('td'); 16 const td_3 = document.createElement('td'); 17 const td_4 = document.createElement('td'); 18 const tr = document.createElement('tr'); 19 tr.id = "tr-" + count; 20 td_1.appendChild(document.createTextNode(count)); 21 td_2.appendChild(document.createTextNode(todoItem)); 22 td_3.appendChild(btn_1); 23 td_4.appendChild(btn_2); 24 tr.appendChild(td_1); 25 tr.appendChild(td_2); 26 tr.appendChild(td_3); 27 tr.appendChild(td_4); 28 document.getElementById('list_item').appendChild(tr); 29 btn_2.addEventListener('click',function(){ 30 const list_item = document.getElementById('list_item'); 31 const tr_count = document.getElementById('tr-'+count); 32 list_item.removeChild(tr_count); 33 }); 34 count++; 35 }) 36});
###調べたこと
エラーメッセージを調べて子要素がページに存在していないということは理解しています。また、以下のリンクの記事から同様のコードを記述したつもりです。
https://developer.mozilla.org/ja/docs/Web/API/Node/removeChild
// 親ノードから指定した子要素を除去
html
1<div id="top"> 2 <div id="nested"></div> 3</div>
js
1var d = document.getElementById("top"); 2var d_nested = document.getElementById("nested"); 3var throwawayNode = d.removeChild(d_nested);
回答3件
あなたの回答
tips
プレビュー