2017-05-04 7 views
1

私はボタンをクリックしてdivにコンテンツを追加するページを作成しています。今、私は3つのボタンを持っています。すべてが少なくとも1つのクラスを持っています。各クラスは、独自のコンテンツを持つ1つのdiv IDに対応しています。私がしようとしているのは、ボタン上にある各クラスを取得し、同じ名前を持つdiv IDを見つけ出し、クローンして#return divに追加します。これらのクラスに一致するすべてのIDをクローンする方法

ボタンに表示される最初のクラス名のみを複製する作業例があります。どのように私のjQueryボタンのクラスに一致するすべてのdivのIDを見つけることができます、クローンを作成し、それらを#returnに追加しますか?

これらのボタンは同じクラスにすることができますが、#returnでクローンを作成するときには、再びクローンする必要はありません。私はこれを防止しようとするif文を持っていますが、それはそれらを削除してしまいます。どうすればこれをやめることができますか?

私はこのjqueryの作業を示しているここfiddleを持っている:

$(document).ready(function() { 
    $("[id^=button]").click(function() { 
    var myclass = $(this).attr("class").split(" "); 

    if ($(this).is(".a1,.a2,.a3")) { 
     $("div#" + myclass).first().clone().appendTo("#return"); 
    } 

    if ($("#return div#" + myclass).length > 1) { 
     $("#return div#" + myclass + ":last").remove(); 
     } 

    }); 
}); 
+0

ことの一つは、あなたが要素のクローンを作成するとき、それはそのクローンと同じIDを持っているということです。 IDはドキュメント内で一意でなければならないので、 'div#a1:last'のようなものは' div#a1'と同じです。 'div#a1'も冗長であることに注意してください。なぜなら'#a1'はその要素が 'div'かどうかにかかわらず、IDが 'a1'の要素を一意に識別するためです。 –

+0

これは使用中に問題を起こすでしょうか? div#a1を削除すると、現在ページにあるものはすべて削除されますが、div#returnをターゲットにして削除すると、すでにdiv#a1が削除され、appendTo #returnが削除されます。 – cgrouge

+0

IDはドキュメント内で一意である必要があります。言い換えれば、ドキュメントに複数の 'div#a1'がある場合、それは無効なドキュメントであり、今後は他にもいくつかの問題があります。 –

答えて

2

問題はmyclassが配列であるということですので、あなたが"div#" + myclassのようなセレクタを作成するための文字列としては、セレクタを作成して終わることを追加するとき"div#a1,a2"それはあなたが望むものではありません。

myclassアレイを繰り返して、各クラスのロジックを実行する必要があります。

でデモを更新しました。この

$(document).ready(function() { 
    $("[id^=button]").click(function() { 
     var myclass = $(this).attr("class").split(" "); 

     if ($(this).is(".a1,.a2,.a3")) { 
      myclass.forEach(function(currentClass) { 
       if ($("#return div#" + currentClass).length == 0) 
        $("div#" + currentClass).first().clone().appendTo("#return"); 
      }); 
     } 
    }); 
}); 

ような何か:答えは言及していないことをhttps://jsfiddle.net/zyech6L3/2/

+0

ああ、そんなに意味があります!はい、これは私が必要とするように正確に働いています。また、if文は重複して再度重複しないようにしています。どうもありがとうございます! – cgrouge

+0

私は@MikeMcCaughanからdivを複製し、IDを変更しないことを提案しました。あなたの答えを使用して、私はdivを複製し、#を#klone + myclassに変更するために少し追加しました。 https://jsfiddle.net/zyech6L3/3/ – cgrouge

+0

@cgrouge確かに、有効なhtmlを持っていて、今後いくつかの落とし穴を避ける必要があります。良い修正。 –

1

あなたはクラスが利用可能であるか確認することを反復処理する必要があります。以下のような :

for(var j=0; j<myclass.length; j++){ 
    $("div#" + myclass[j]).first().clone().appendTo("#return"); 
} 

このフィドルを参照してください。 https://jsfiddle.net/c4soamkr/

+0

これは私が必要としていたものとほとんど正確でした。私は私がボタンの各クラスを反復していないことを理解していませんでした。これは今や理にかなっています!このソリューションは、既にクローン化された後にクローニングを停止しませんでした – cgrouge

関連する問題