やりたいこと:
queryselectorAllが複数あり、これをfor文で同時処理を行いたい。
(queryselectorAll('textarea'),queryselectorAll('.ta-parent)
試してみたこと:
・使用するqueryselectorAll('textarea'),queryselectorAll('.ta-parent)を配列にする。
・分割代入を使用して、for文で処理しようとした。
該当箇所:
const paChild = [...iterable, ...taParent];
for (const [elmTa, taChild] of paChild) { ~
エラー内容:
上記を行ったがエラーがでた。
エラー箇所:iptaParent.appendChild(taChild); 処理部分の3か所目
エラー内容:
Uncaught TypeError: Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node
(appendChild使うときは、Nodeじゃないと不可)
まとめ:
・queryselectorAll複数をfor文で同時処理する為に、queryselectorAllを配列にした。
・分割代入を使用してfor文で処理しようとした(コード参照)
・for文の変数部分(taChild)はappendechildを使用している為、ノードでないと処理できない(配列は不可)
・しかし、配列処理をしないとqueryselectorAll複数のセレクターは複数同時処理できない
queryselectorAllが複数ある時、for文にて同時処理するにはどうすれば宜しいか、
何卒ご教示お願い致します。
コード:
JavaScript
1const elmText = document.querySelector('.elm-text'); 2 3 elmText.onclick = () => { 4 5 const iptaAll = document.querySelectorAll('.ipta-parent'); 6 const iterable = document.querySelectorAll('textarea'); 7 const taParent = document.querySelectorAll('.ta-parent'); 8 const paChild = [...iterable, ...taParent]; 9 10 if( checkAll.length == 0) { 11 for (const [elmTa, taChild] of paChild) { 12 const iptaParent = document.createElement('div'); 13 iptaParent.classList.add('ipta-parent'); 14 iptaParent.style.position = 'absolute'; 15 16 const ipCheck = document.createElement('input'); 17 ipCheck.setAttribute('type','checkbox'); 18 ipCheck.classList.add('ip-check'); 19 ipCheck.style.position = 'absolute'; 20 ipCheck.style.left = elmTa.getBoundingClientRect().left - cRect().left -15 + 'px'; ←処理部分 21 ipCheck.style.top = elmTa.getBoundingClientRect().bottom - cRect().top -15 + 'px'; ←処理部分 22 23 element.appendChild(iptaParent); 24 iptaParent.appendChild(taChild); ←処理部分、エラー箇所 25 iptaParent.appendChild(elmTa); 26 } 27 28 } else if (checkAll.length == iterable.length || 29 checkAll.length < iterable.length) { 30 for (const elmTa of iterable) { 31 taParent.insertBefore(elmTa, null); 32 } 33 for (const ipta of iptaAll) { 34 ipta.remove(); 35 } 36 let t = e.target; 37 } 38 }
回答3件
あなたの回答
tips
プレビュー