2017-08-01 113 views
1

我正在一個項目,我需要克隆span.response11,將其追加到#parent,然後添加一個新的div到span.response11。我有克隆過程中進行,但添加新的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>'); 
    } 
}); 

我只需要添加div.red一次。如果span.response已經有div.red作爲孩子,jquery不應該再添加div。

如何讓我的功能停止添加更多的div?

+0

您正在克隆您已將紅色添加到的元素。重新思考你的所有邏輯 – charlietfl

+0

@charlietfl我克隆了元素,然後追加了紅色。一旦克隆,我就會發現在點擊多次時會出現克隆哪個元素的問題。我將不得不作出調整,以便span.response內部html被克隆並用不同的東西包裝起來。 – cgrouge

回答

2

如果span.response已經div.red作爲一個孩子,jQuery的不應該再添加div的。

您不應該使用:has它是用於測試相同的元素。使用.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>'); 
    } 
}); 

此外,在不同的音符,我會強烈從插入<div><span>反對你,因爲<span>是一個內聯元素,而<div>是塊一個!

+0

'has'有點像發現,不是相同的元素 – charlietfl

+0

@charlietfl啊...我現在明白了,上下文不一樣......':)'我增加了一些信息來使我的回答更好。 –

+0

我認爲這個問題實際上是在克隆 – charlietfl