2017-08-01 3 views
1

私はspan.response11をクローンし、#parentに追加してからspan.response11に新しいdivを追加する必要があるプロジェクトに取り組んでいます。私は、クローニングプロセスを行っているが、新しいdiv要素を追加するとき、私のIF文は、すでにそれはここでルールがもはや真でない場合、追加を停止する

を付加している要素にするdivのを追加し続け、私のjQueryを使ってバイオリンです: https://jsfiddle.net/4bmwbkgx/2/

// if this cloned element doesn't already have the child div.red, append it. 
$("#parent > span").each(function(index, element) { 
    if ($(element).not(":has(.red)")) { 
    $(element).prepend('<div class="red">This is red</div>'); 
    } 
}); 

I div.redを一度追加するだけです。 span.responseに既にdiv.redが子としてある場合、jqueryはdivをもう追加しないでください。

divを追加する機能を停止するにはどうすればよいですか?

+0

すでに赤を追加した要素を複製しています。あなたのすべてのロジックを再考してください。 – charlietfl

+0

@charlietfl要素をクローンしてから、赤を追加しています。一度クローンを作成すると、複数回クリックするとどの要素をクローンするかという問題が発生することがあります。 span.response inner htmlが複製され、別のものでラップされるように調整する必要があります。 – cgrouge

答えて

2

span.responseがすでに子としてdiv.redを持っている場合は、jQueryのはもうdiv年代を追加しないでください。

:hasは、同じ要素をテストするためのものです。 1があるかどう.findを使用して確認してください。

また
$("#parent > span").each(function(index, element) { 
    // Do the below, only when `.red` is not there inside this element. 
    if (!$(element).find(".red").length) { 
    $(element).prepend('<div class="red">This is red</div>'); 
    } 
}); 

<span>はインライン要素であるとして<div>がブロック1である一方で、別のノートに、私は強く、<span>内部<div>を挿入するからあなたをオブジェクトう!

+0

'has'はfindと似ていますが、同じ要素ではありません。 – charlietfl

+0

@charlietflああ...私は今それを取得しますが、コンテキストは異なります...':) '私は自分の答えを良くするためにいくつかの情報を追加しました。 –

+0

私はこの問題が実際にクローニングにあると思っています – charlietfl

関連する問題