Jquery-Clone()追加

时间:2010-02-02 21:21:53

标签: jquery clone

我正面临一个问题,即尝试克隆父div,然后直接将其添加到自身下方。只要最后一个节点,我的功能就可以正常工作 选择如此:

 <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。任何帮助,将不胜感激。删除功能是

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

    }

3 个答案:

答案 0 :(得分:6)

这是你想要做的吗?

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

更新: 如果你想要嵌套,试试这个:

<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>

答案 1 :(得分: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>

我想你要做什么或者我误解了吗?还有什么是“repeat *”类的siginifigance,还是用作你试图实现的选择器的东西?

答案 2 :(得分:1)

两件事:

  • (1)我读它的方式,对$ .end()的调用是多余的;我相信$ .end()只有在你打算在它之后连接更多的电话时才有用。

  • (2)看起来你试图将CurrentDiv的克隆作为CurrentDiv的直接子(而不是兄弟)附加;由于这些都是元素,我不确定它是否有意义。

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

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