いつもお世話になっています。
jsを勉強中ですが、難しくて教えて頂けたらと思います。
勉強のため、特定のクラス要素を別の要素内に移動させる処理を
バニラjsで書きたいと思っています。
jqueryだと以下のようになるのですが、
jsで書くにはどうすればいいのでしょうか?
html
1<div> 2 <p class="original-data">移動データ1</p> 3 <p>移動しない</p> 4 <p class="original-data">移動データ2</p> 5 <p>移動しない</p> 6 <p>移動しない</p> 7 <p class="original-data">移動データ3</p> 8 <p class="original-data">移動データ4</p> 9 <p class="original-data">移動データ5</p> 10</div> 11 12<div> 13 <span id="after-moving"></div> 14</div>
jquery
1$(function(){ 2 $('.original-data').insertBefore('#after-moving'); 3});
結果です
html
1<div> 2 <p>移動しない</p> 3 <p>移動しない</p> 4 <p>移動しない</p> 5</div> 6 7<div> 8 <p class="original-data">移動データ1</p> 9 <p class="original-data">移動データ2</p> 10 <p class="original-data">移動データ3</p> 11 <p class="original-data">移動データ4</p> 12 <p class="original-data">移動データ5</p> 13 <span id="after-moving"></div> 14</div>
失敗したコード
コチラはエラーが出てきてしまい処理が完了しませんでした
Uncaught DOMException: Failed to execute 'insertBefore' on 'Node': The node before which the new node is to be inserted is not a child of this node.
html
1<div> 2 <p class="original-data">移動データ1</p> 3 <p>移動しない</p> 4 <p class="original-data">移動データ2</p> 5 <p>移動しない</p> 6 <p>移動しない</p> 7 <p class="original-data">移動データ3</p> 8 <p class="original-data">移動データ4</p> 9 <p class="original-data">移動データ5</p> 10</div> 11 12<div> 13 <span id="after-moving"></div> 14</div>
js
1let newNode = document.createElement('span'); 2let originalData = document.querySelectorAll('.original-data'); 3let afterMovingData = document.getElementById('after-moving').parentNode; 4for (i = 0, len = originalData.length; i < len; i++) { 5 afterMovingData.insertBefore(newNode , originalData[i]); 6}
なぜバニラに直そうと思ったのでしょう?
勉強のためですか?
元のソースがどう動くかも書いてください。
そして、自分ではどう動くと思って、どう失敗したんでしょうか?
miyabi_takatsuk
はい。勉強の為です。現在、jqueryしか分からないので。。。
今起きてる問題を明記してください。
コードもらってできた!では、分かった気になるだけです。
> <span id="after-moving"></div>
閉じタグが、違いますね。
それが原因では?
jsの勉強だけが目的なら普通に
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.js
の処理を追える範囲で追ってみてなぁなぁで何となく理解を進めてみるのはどうだろうか?
追う過程で色々と目に止まるものもあるはず
回答3件
あなたの回答
tips
プレビュー