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

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

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

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

Q&A

解決済

2回答

1458閲覧

javascriptの「.clone」で複製するときに、複製する要素を指定する方法

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2018/02/27 05:24

編集2018/02/27 05:26

###■目的
javascriptの「.clone」で複製するときに、複製する要素を指定したいです。具体的には、

下記のように「複製ボタン」があるとき、ボタンのあるセクションの要素を複製したい。という目的です。

html

1 2<section id="A"> 3「複製する要素」 4「複製ボタン」 5</section> 6 7<section id="B"> 8「複製する要素」 9「複製ボタン」 10</section> 11 12★★ここに要素を複製(sectionBのボタンを押したらsectionBの要素だけを複製したい。)★★

###■現状の問題
現状は次のように、
・複製する要素が指定できていない。
・「複製ボタン」を押すたびに追加されていってしまう。
という問題があります。

☆実際の動作
https://jsfiddle.net/vdavs81a/

☆上のコード

html

1<!-- 【スライダーA】 --> 2<section id="A"> 3<div class="slider"> 4 <input type="radio" name="slider-a" id="slider-a1" class="slider1" value="a1" checked> 5 <input type="radio" name="slider-a" id="slider-a2" class="slider2" value="a2"> 6 <input type="radio" name="slider-a" id="slider-a3" class="slider3" value="a3"> 7 <div class="inner_slider"> 8 <label for="slider-a2"><img src="http://bit.ly/2sNLCTb" class="img1"></label> 9 <label for="slider-a3"><img src="http://bit.ly/2FtAkX4" class="img2"></label> 10 <label for="slider-a1"><img src="http://bit.ly/2FrhxLM" class="img3"></label> 11 </div> 12</div> 13 <div class="hukusei">複製ボタン</div> 14</section> 15 16<!-- 【スライダーB】 --> 17<section id="B"> 18<div class="slider"> 19 <input type="radio" name="slider-b" id="slider-b1" class="slider1" value="b1" checked> 20 <input type="radio" name="slider-b" id="slider-b2" class="slider2" value="b2"> 21 <div class="inner_slider"> 22 <label for="slider-b2"><img src="http://bit.ly/2oySzSB" class="img1"></label> 23 <label for="slider-b1"><img src="http://bit.ly/2ozsrXV" class="img2"></label> 24 </div> 25</div> 26 <div class="hukusei">複製ボタン</div> 27</section> 28 29<!-- 【複製画像】 --> 30<p>▼▼ここに複製▼▼</p> 31<div class="linkimg"></div>

css

1/* 【スライダー】のCSS */ 2.slider { 3width: 200px; 4height: 150px; 5overflow: hidden; 6} 7.img1 { 8position: absolute; 9left: 0; 10top: 0; 11} 12.img2 { 13position: absolute; 14left: 200px; 15top: 0; 16} 17.img3 { 18position: absolute; 19left: 400px; 20top: 0; 21} 22.img4 { 23position: absolute; 24left: 600px; 25top: 0; 26} 27 28.inner_slider { 29position: relative; 30width: 800px; 31left: 0; 32top: 0; 33transition: all .3s ease-in-out; 34} 35.inner_slider > img { 36 width: inherit; 37 height: inherit; 38 object-fit: contain; 39} 40 41.slider1:checked ~ .inner_slider { 42transform: translateX(0); 43} 44.slider2:checked ~ .inner_slider { 45transform: translateX(-200px); 46} 47.slider3:checked ~ .inner_slider { 48transform: translateX(-400px); 49} 50

javascript

1$(".hukusei").click(function(){ 2 $("div:first").clone().appendTo(".linkimg"); 3})

HTMLの構造は変えずに解決したいです。
javascriptお詳しい方、よろしくお願いいたします。m(_ _)m

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

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

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

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

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

guest

回答2

0

javascript

1$(function(){ 2 $('.hukusei').click(function(){ 3 var $section = $(this).closest('section'); 4 var id = $('input[type="radio"]:checked', $section).val(); 5 var $target = $('label[for="slider-'+id+'"]', $section); //選択されている要素 6 7 $('.linkimg') 8 .empty() //一回空にする 9 .append($target.clone()); //複製 10 }) 11}) 12

動作はこれで行けるかと
CSSを調整しないといけないかもです。

投稿2018/02/27 05:43

編集2018/02/27 05:45
kszk311

総合スコア3404

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

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

退会済みユーザー

退会済みユーザー

2018/02/27 05:59

ありがとうございます。 む~、惜しいですね。どうやら、 ラジオボタンで選択中の画像(画像スライダーで表示中の画像)の、一個手前の画像 が複製されてしまうようです。。
kszk311

2018/02/27 06:13

slider-a2 img1 slider-a3 img2 slider-a1 img3 となっています。 連番を振り直したら直ると思います
退会済みユーザー

退会済みユーザー

2018/02/27 06:16

なるほど。ありがとうございます。 実はその連番は、ラジオボタンをスライダー化するために必要な連番でして、振り直すわけにはいかないのです。(>_<) 今回はtkturboさんのご回答をベストアンサーにさせていただきました。 でも、ご回答ほんとうにありがとうございます。感謝です。
guest

0

ベストアンサー

これでどうでしょう。

$(".hukusei").click(function(){ var cloneObject = $(this).parent().find("div:first").clone(); });

追記:
何をもって「cloneできない」と言っているかわかりませんが、当方(Win10xEdge)では下記の書き方でcloneされた画像が結果反映部に表示されています。

<script> $(document).ready(function(){ $(".hukusei").click(function(){ var cloneObject = $(this).parent().find("div:first").clone(); // console.log(cloneObject[0]); $(".linkimg").empty(); //貼り付け先を空にする、というのを忘れてました>< cloneObject.appendTo($(".linkimg")); }) }); </script>

投稿2018/02/27 05:39

編集2018/02/27 06:08
tkturbo

総合スコア5572

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

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

退会済みユーザー

退会済みユーザー

2018/02/27 05:55

ありがとうございます。 残念ながら(>_<)、そちらでは複製が起こりませんでした。
退会済みユーザー

退会済みユーザー

2018/02/27 06:09

失礼いたしました。 ×そちらでは複製が起こりませんでした。 ○そちらでは複製されるものの、「複製ボタン」を押すたびに画像が増えていってしまうようです。 でした。 でも、今回の質問の1つめ(複製ボタンのsetcionの画像を複製したい)は解決ですね♪ ありがとうございます!
退会済みユーザー

退会済みユーザー

2018/02/27 06:13

>//貼り付け先を空にする、というのを忘れてました>< おお、できました。ご修正感謝です。お手数おかけしました。完璧です♪♪どうもありがとうございます。 以下、別件で恐縮です。 複製先の画像からラジオボタンを消すためには、 ・CSSでdisplaynoneする ・javascript側の操作 のどちらがいいか、ご意見いただけませんでしょうか?
tkturbo

2018/02/27 06:17

「cloneObject.find("input").hide();」←こっちのほうが書くのが楽。
退会済みユーザー

退会済みユーザー

2018/02/27 07:08

なるほど。ありがとうございます。 あと1個だけ、どうしてもできなくて、すみません。m(__)m $(".linkimg").empty(); が、wordpressでだけ効かないのです。jqueryも下記のように入れ子にしているのですが、どうしてもemptyにならず、追加されてしまうのです。 別の書き方でemptyさせる方法などはございませんでしょうか? <script> (function($){ $(document).ready(function(){ $(".hukusei").click(function(){ var cloneObject = $(this).parent().find(".slider").clone(); // console.log(cloneObject[0]); $(".linkimg").empty(); cloneObject.appendTo($(".linkimg")); }) }); })(jQuery); </script>
tkturbo

2018/02/27 07:15

「$(".linkimg").html("")」というやり方も。
退会済みユーザー

退会済みユーザー

2018/02/27 07:22

たびたびありがとうございま!! やってみたのですけれど、やはり上書きされずどんどん追加されてしまいます。困りました。jsfiddleではできているのに、不思議です。 ひとまず「新しく追加されたやつ以外はdisplaynoneしてね」で無理やり対処しました。笑 「ひょっとしてこれじゃないの?」など、また思いつくことがございましたら、いつでもコメントお待ちしております。
退会済みユーザー

退会済みユーザー

2018/02/28 04:23 編集

また別の問題が… ご教示いただいたコードで画像がcloneされるとき、、 なぜか参照元のスライダーが、最初に表示されている画像に戻ってしまう現象が起こるのですけれど、これを起こさない方法はございませんでしょうか? https://jsfiddle.net/vdavs81a/43/ →「複製ボタン」をクリックすると、勝手にスライダーが戻るのです。 なんども本当にすみません。他に頼る人いなくて。。(>_<)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問