2010-02-02 122 views
3

我面临着一个问题,试图克隆一个父div,然后直接将其附加到它自己之下。我的功能,只要能正常工作的最后一个节点是 选择这样:Jquery-Clone()追加

<div> 
<div> A </div> 
<div> B </div> 
<div> C </div> 
    </div> 

将导致

<div> 
<div> A </div> 
    <div> A.1 </div> 
<div> B </div> 
<div> C </div> 
    </div> 

如果我克隆A.但是,如果我再克隆产品A,我得到。

<div> 
<div> A </div> 
    <div> A.1 </div> 
<div> A </div> 
    <div> A.1 </div> 
<div> B </div> 
<div> C </div> 
    </div> 

,而我想

<div> 
<div> A </div> 
    <div> A.1 </div> 
    <div> A.1 </div> 
<div> B </div> 
<div> C </div> 
    </div> 

我的标记和代码如下:

<div id="maindiv"> 
<div> 
    <label>First</label> 
    <input type="button" class="repeat1" onclick="Repeat(this)"/> 
</div> 
<div> 
    <label>Second</label> 
    <input type="button" class="repeat1" onclick="Repeat(this)"/> 
</div> 
<div> 
    <label>Third</label> 
    <input type="button" class="repeat2" onclick="Repeat(this)"/> 
</div> 

</div> 

function Repeat(obj) 
{ 
var CurrentDiv = $(obj).parents("div[class^='repeat']:first"); 
$(CurrentDiv).clone().appendTo(CurrentDiv).end(); 

} 

我也有删除类似的问题,所有的子节点,而我删除了刚刚想要删除一个div。任何帮助,将不胜感激。 REMOVE功能是

function Remove(obj) 
    { 
    var CurrentDiv = $(obj).parents("div[class^='repeat']:first"); 
    CurrentDiv.remove(); 

    } 

回答

6

这是你正在尝试做什么?

function Repeat(obj) 
{ 
var currentDiv = $(obj).parent("div"); 
currentDiv.clone().insertAfter(currentDiv); 
} 

UPDATE: 如果你想嵌套,试试这个:

<div id="maindiv"> 
    <ul>First 
    <li> 
    <label>Sub-first</label> 
    <input type="button" class="repeat1" onclick="Repeat(this)"/> 
    </li> 
</ul> 

<ul>Second 
    <li> 
    <label>Sub-second</label> 
    <input type="button" class="repeat1" onclick="Repeat(this)"/> 
    </li> 
</ul> 

<ul>Third 
    <li> 
    <label>Sub-third</label> 
    <input type="button" class="repeat2" onclick="Repeat(this)"/> 
    </li> 
</ul> 
</div> 

<script> 
function Repeat(obj) 
    { 
    var CurrentLi = $(obj).parent("li"); 
    CurrentLi.clone().insertAfter(CurrentLi); 
    } 
</script> 
+0

插入后解决了问题,但我放弃了与appendTo的缩进。 – SDK 2010-02-02 22:22:06

+0

像SLaks提到:你的标记是搞砸了。你显示的凹痕是任意的。您需要添加另一层DIV(或使用UL和LI)才能使嵌套生效。 – jkyle 2010-02-03 15:22:38

1

我觉得你的标记是困惑:

<div> 
<div> A </div> 
<div> B </div> 
<div> C </div> 
</div> 

在重复的机身采用这样的:

$(obj).clone().text('A 1').insertAfter(obj);

应出示:

<div> 
<div> A </div> 
<div>A 1</div> 
<div> B </div> 
<div> C </div> 
</div> 

同样使用这个作为你删除函数体:$(obj).siblings('div:first').remove();

应该那么做:

<div> 
<div>A 1</div> 
<div> B </div> 
<div> C </div> 
</div> 

的ID什么youre试图做的还是AMI我误会?另外什么是“重复*”类的siginifigance或是一个东西用作你试图实现的选择?

+0

Repeat类旨在用作选择器。插入后做了这个伎俩,但我失去了缩进。 – SDK 2010-02-02 22:33:41

1

两件事情:

  • (1)的方式我读它,调用$ .END ()是多余的;我相信$ .end()只有在你要在它之后链接更多的调用时才有用。 (2)它看起来像你试图将CurrentDiv的克隆作为CurrentDiv的直接子对象(而不是同级对象)来附加;既然这些都是元素,我不确定它是否合理。

但是,如果它确实有意义,那么A和前一个克隆都将在第二次调用Repeat()时被克隆完全是自然的。

最后 - 仅供参考,您的变量和函数名称不是惯用的。更习惯于以小写字母开头。

+0

对于格式(缩进),它应该是一个孩子,但是它是一个副本,独立于它的“父母”。因此,我应该能够删除一个节点而不是整个结构。 – SDK 2010-02-02 22:25:20

+0

删除节点将删除其子节点,除非您首先努力将这些子节点移动到别处。 – 2010-02-02 22:42:19