質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3752閲覧

Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.とエラーが出る。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/03/29 06:11

Failed to execute 'appendChild' on 'Node': parameter 1 is not of type 'Node'.とエラーが出る。

quetySeletorallで取得した配列がDOMツリー上のノードでないのでこのエラーが出るらしいのですが、初心者なのでよくわかりません。
https://tridentwebdesign.blog.fc2.com/blog-entry-578.html

おそらくノードとはDOMツリー上の要素などのことを指すのだと思いますが、受け取った配列のクラス要素はこのノードではないのですか?
それならいったい何なのでしょうか?
これをノードかする方法も教えてください。

作成中のソース。最終的にはこのクラスの要素すべてを一番下にもっていきたい

document.querySelector('#js-move-bottom').addEventListener('click', function() { var parent = document.querySelectorAll('.serp-wrap'); var mysite = document.querySelectorAll('.serp--middle'); parent[0].appendChild(mysite); });

おそらくforなどで要素の個数分繰り返すしかないですよね。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2018/03/29 06:17

> おそらくforなどで要素の個数分繰り返すしかないですよね。 判ってらっしゃるではないですか
guest

回答2

0

ベストアンサー

たとえばこう

CSS

1.aqua{background-Color:aqua;} 2.lime{background-Color:lime;} 3.yellow{background-Color:yellow;}

javascript

1window.addEventListener('DOMContentLoaded', function(e){ 2 document.querySelector('#js-move-bottom').addEventListener('click', function() { 3 var parent = document.querySelectorAll('.serp-wrap'); 4 var mysite = document.querySelectorAll('.serp--middle'); 5 Array.prototype.forEach.call(mysite,function(x){parent[0].appendChild(x);}); 6 }); 7});

HTML

1<input type="button" id="js-move-bottom" value="test"> 2<div class="aqua">0 3<div class="serp--middle">a</div> 4<div class="serp--middle">b</div> 5<div class="serp--middle">c</div> 6</div> 7<div class="serp-wrap lime">1</div> 8<div class="serp-wrap yellow">2</div>

移動ではなくコピー

javascript

1<style> 2.aqua{background-Color:aqua;} 3.lime{background-Color:lime;} 4.yellow{background-Color:yellow;} 5</style> 6<script> 7window.addEventListener('DOMContentLoaded', function(e){ 8 document.querySelector('#js-move-bottom').addEventListener('click', function() { 9 var parent = document.querySelectorAll('.serp-wrap'); 10 var mysite = document.querySelectorAll('.serp--middle'); 11 Array.prototype.forEach.call(mysite,function(x){ 12 Array.prototype.forEach.call(parent,function(y){ 13 y.appendChild(x.cloneNode(true)); 14 }); 15 }); 16 }); 17}); 18</script> 19<input type="button" id="js-move-bottom" value="test"> 20<div class="aqua">0 21<div class="serp--middle">a</div> 22<div class="serp--middle">b</div> 23<div class="serp--middle">c</div> 24</div> 25<div class="serp-wrap lime">1</div> 26<div class="serp-wrap yellow">2</div>

※一部修正

グループごとにbを下げる

javascript

1<style> 2.aqua{background-Color:aqua;} 3.lime{background-Color:lime;} 4.yellow{background-Color:yellow;} 5</style> 6<script> 7window.addEventListener('DOMContentLoaded', function(e){ 8 document.querySelector('#js-move-bottom').addEventListener('click', function() { 9 var mysite_b = document.querySelectorAll('.serp--middle-b'); 10 Array.prototype.forEach.call(mysite_b,function(x){ 11 x.parentNode.appendChild(x); 12 }); 13 }); 14}); 15</script> 16<input type="button" id="js-move-bottom" value="test"> 17<div class="aqua">0 18<div class="serp--middle-a">a</div> 19<div class="serp--middle-b">b1</div> 20<div class="serp--middle-b">b2</div> 21<div class="serp--middle-c">c</div> 22</div> 23 24<div class="lime">1 25<div class="serp--middle-b">b1</div> 26<div class="serp--middle-a">a</div> 27<div class="serp--middle-b">b2</div> 28<div class="serp--middle-c">c</div> 29</div> 30 31<div class="yellow">2 32<div class="serp--middle-a">a</div> 33<div class="serp--middle-b">b</div> 34<div class="serp--middle-c">c</div> 35</div>

投稿2018/03/29 06:25

編集2018/03/29 07:31
yambejp

総合スコア114883

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/29 06:53

ありがとうございます。 難しくて初心者には理解が難しいですね。 また、うまくお伝え出来ず恐縮ですが下記のように並んでいるのでこの各種bのみcと変更したいです。 <div class="aqua">0 <div class="serp--middle">a</div> <div class="serp--middle">b</div> <div class="serp--middle">c</div> </div> <div class="aqua">0 <div class="serp--middle">a</div> <div class="serp--middle">b</div> <div class="serp--middle">c</div> </div> <div class="aqua">0 <div class="serp--middle">a</div> <div class="serp--middle">b</div> <div class="serp--middle">c</div> </div>
yambejp

2018/03/29 07:03

ごめんなさい、追記部分「各種bのみcと変更したい」の意味がわかりません 私の提示した移動処理ではなく、コピーすればいいのでしょうか? 一応そのソースは追記しておきました
退会済みユーザー

退会済みユーザー

2018/03/29 07:20

恐縮です。もう少しソースを具体的にしてみました。 // freeNumber <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-b">b</div> <div class="serp--middle-c">c</div> </div> <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-b">b</div> <div class="serp--middle-c">c</div> </div> <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-b">b</div> <div class="serp--middle-c">c</div> </div> この状態で、真ん中の要素を下にずらすボタンをついかしてそれを押すと三つの塊すべて変更されるようにしたいです。 つまり下記のようになります。 <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-c">c</div> <div class="serp--middle-b">b</div> </div> <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-c">c</div> <div class="serp--middle-b">b</div> </div> <div class="aqua">0 <div class="serp--middle-a">a</div> <div class="serp--middle-c">c</div> <div class="serp--middle-b">b</div> </div> このように真ん中の要素を上や下に自由にいっぺんにずらせるようにしたいです。
yambejp

2018/03/29 07:32

グループごとにbを下に下げる処理でよいのでしょうか? 追記しておきました
退会済みユーザー

退会済みユーザー

2018/03/29 07:45

ありがとうございます。まさにこんな感じです。
guest

0

document.querySelectorAllメソッドは(HTMLElementとかの)オブジェクトの配列っぽい)NodeListオブジェクトを返します.
一方appendChildメソッドは引数としてNode(HTMLElement)オブジェクトを要求します.

従って, NodeListの中身のHTMLElement群をappendChildしたいのであれば, ループで一つずつHTMLElementを追加して下さい.


NOTE:
当初HTMLCollectionとしていましたが, 正しくはNodeListでした.

投稿2018/03/29 06:21

編集2018/03/29 12:15
defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

defghi1977

2018/03/29 12:12

ご指摘ありがとうございます
defghi1977

2018/03/29 12:17

> 後続質問では、本件と同じ問題ではまっていますね…。 だからjQueryが優れているのか, 優れているからDOMインターフェースへの理解が進まないのか どしたもんだろ
think49

2018/03/29 13:00

To: defghi1977 さん 釣り方よりも魚を追い求めるタイプなのかもしれません。 https://teratail.com/questions/39089 昔、同じような質問者がいらっしゃって、その方は退会されましたが、同じ匂いを感じます。 彼は釣り方を求めますが、自分が分からないと思えるレベルの釣り方を教えて貰った時には「難しいですね。初心者なのでもっと優しく説明して下さい」と要求をし、高レベルな回答(と彼は思っている)は早々に理解を諦める傾向がありました。 最終的には、他の回答で魚を得れば、そこで妥協して質問を閉じます(彼が本当の意味で心から理解する事はありませんでした)。 理解できないのならもっと基礎的な部分から学習するよう促すべきと考え、何度かそうしましたが、彼は聞く耳持たずでしたので手の打ちようがありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問