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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

766閲覧

特定の要素内の全ての要素のコピー/他要素へペースト

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/09/23 08:38

前提・実現したいこと

特定の要素内の全ての要素をコピーして、他の要素内に追加したいです。

発生している問題・エラーメッセージ

下のコードだと、2つ目のdiv(.under)にしかコピー(append)されません。

該当のソースコード

html

1<div id="divforvideos"> 2 <video>....</video> 3 <video>....</video> 4 <video>....</video> 5 <video>....</video> 6</div>

javascipt

1$(function() { 2 var arr = jQuery.makeArray(document.querySelectorAll("#divforvideos video")); 3 4 $("#divforvideos").empty(); 5 $("#divforvideos").append('<div class="random" style="background-color:red; margin:30px;"></div>'); 6 $("#divforvideos").append('<div class="under" style="background-color:blue; margin:30px;"></div>'); 7 $(".random").append($(arr)); 8 $(".under").append($(arr)); 9});

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず1行目、なぜjQueryあるのにjQueryで取得しないんですか?
var arr = $("#divforvideos video");

次に本題。
.append()は元の要素を移動します。
コピーしたいときは.clone()してから.append()してください。
元の親要素に対して.empty()してあったので、追加先両方とも.clone()で入れてます。
なので、ここで保持しているarrの要素たちはどこにも追加されずに保持されてます。
arrの中身いじってもどこにも反映されないのでご注意を。

ちなみに.clone()そんなに軽い処理じゃないので複雑な構造の大量の要素を一気にコピーしようとすると特にIE11とかでめっちゃ重いです。
例示のコード程度なら大したことはないですが。

で、.clone()には引数があって、true / falseを指定できます。
trueを指定すれば、コピー対象の要素たちに登録されているイベントハンドラもコピーしてくれます。
引数渡さなかったらイベントハンドラはコピーしません。

js

1$(function() { 2 var arr = $("#divforvideos video"); 3 4 $("#divforvideos").empty(); 5 $("#divforvideos").append('<div class="random" style="background-color:red; margin:30px;"></div>'); 6 $("#divforvideos").append('<div class="under" style="background-color:blue; margin:30px;"></div>'); 7 $(".random").append(arr.clone()); 8 $(".under").append(arr.clone()); 9}); 10

投稿2018/09/23 12:52

spookybird

総合スコア1803

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

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

退会済みユーザー

退会済みユーザー

2018/09/23 17:11 編集

上のコードで解決しました。 ありがとうございます。 大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問