2012-02-28 11 views
2

私は入力フィールドを持つフォームを持っていて、クライアントはフィールドの下部にあるボタン「システムを追加」をクリックできます。この関数は、id = "template"のdivをクローンします。ここまでは順調ですね。jqueryクローンが私が期待したところに表示されない

Existing Form 
Existing Form 
Existing Form 
Cloned 3 
Cloned 2 
Cloned 1 
Add a System Button 

んだけど、システムの追加ボタンの上tehの非常に最後の項目としてクローン化されたテンプレートを移動されませんし、それを必要とするもの:3クローン化された

Existing Form 
Existing Form 
Existing Form 
Cloned 1 
Cloned 2 
Cloned 3 
Add a System Button 

はテンプレートが表示される場所であります3回目にボタンをクリックします。ユーザーが20個のシステムを追加すると、ボタンとフィールドは同時に画面に表示されません。 insertBeforeを探しましたが、明らかにJavaScriptには存在しません。

JSコード:ここで

function AddNewSystem(){  
    alert('Adding new system'); 
    var CurrentLi = $('.template'); 
    CurrentLi.clone().insertAfter($('#cloned')); 
} 

は私が話しているかを確認するにはjsfiddleです。 「テンプレートを追加」ボタンをクリックし、テンプレートが表示されたら1(または2または3など)に変更し、これを少なくとも3回繰り返します。この時点で、テンプレートの挿入方法がわかります。

私がやっていることよりもクローンを作成する良い方法はありますか?

+1

James Montagneに感謝します。私は修正された関数を反映するようにjsfiddleを更新しました。 http://jsfiddle.net/Excalibur/Rm4uf/2/ – HPWD

+1

IDを複製するのは良い方法ではありません。むしろクラス要素を複製する。あなたのDOMに同じ名前のIDが20個必要ないと確信しています。それは後であなたを問題に簡単に繋げることができます。 –

+0

私はタイプミスでした。それをキャッチするためにありがとう。私のフィドルは正しい。 – HPWD

答えて

1

私はinsertBeforeを探しましたが、明らかにそれは存在しません JavaScript。

あなたはどのinsertBeforeを持っていないjqueryのを使用しています。

http://api.jquery.com/insertBefore/

function AddNewSystem(){  
    $('#template').clone().insertBefore('#cloned'); 
} 
+0

OMG。ありがとう。 :)私はそれを逃したとは思わない。 – HPWD

0

あなたは#cloned

function Repeat() 
    { 
    var CurrentLi = $('.template').eq(0); 
    CurrentLi.clone().appendTo('#cloned'); 
    } 

fiddle demo *

P.S.にそれらを直接追加することができます#templateをclassに変更しました。ある日、あなたに問題が起こるかもしれません。同じID要素を2つ以上持ちます。

+0

appendToを使用して興味深い。一つの方法は他の方法より優れていますか? – HPWD

関連する問題