JQuery clone不支持类选择器

时间:2016-12-29 11:07:32

标签: javascript jquery

Fiddle

我正在尝试从按钮的onClick()函数克隆范围。第一次这很好,但是当我第二次尝试时,它不是克隆。我做错了什么?

这是我的代码的本质。

.col-md-half {
   @extend .col-md-1;
   width: percentage((0.5 / $grid-columns));
}

此外:

如何在单击“总克隆”按钮时克隆整个集?

我需要使用不同的名称保存数组中的值。这可能吗?

3 个答案:

答案 0 :(得分:4)

  

如何在单击“总克隆”按钮时克隆整个集?

您已使用事件延迟on()代替:

$('body').on('click','.addmachinerow', function(){
   //Event code
})

由于新的.addmachinerow在克隆后动态添加到页面中。

  

我需要用不同的名字保存数组中的值吗?

我建议使用数组名[],如:

<input name='machine_description[]' />
<input name='voltage_level[]' />

希望这有帮助。

答案 1 :(得分:0)

&#13;
&#13;
func(float[],int sz){...}
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这个问题是对JQuery选择器的常见误解。如果您使用ID选择器然后切换到类选择器,那么您通常不会注意到行为的差异。 ID selector doc说

  

ID选择器:如果为多个元素分配了相同的ID,则使用该ID的查询将仅选择DOM中第一个匹配的元素

class selector

  

类选择器:选择具有给定类的所有元素。

这意味着当您克隆目标元素时,您将获得随后的ID选择(JQuery忽略重复项),但如果您不期望JQuery返回多个匹配项,则后续的类选择将使您失望。类选择器非常适合分组元素,但不太适合克隆。

当我在肥皂盒上时 - 每当你使用克隆功能时,你应该考虑并修复你正在制作的潜在重复ID和不需要的类重复。重复的ID肯定是糟糕的显示 - 重复的类实际上可能是设计的,但你仍然应该考虑它们。

在下面的代码示例中,我将类iAmSpartacus分配给onClick()函数随后克隆的原始范围。每个克隆还获取iAmSpartacus类,因此我将其从每个新克隆中删除,以确保$(".iAmSpartacus")选择器始终返回最多一个元素。跨度显示他们当前的class属性来证明这一点。

// this runs one - shows us classes of original span
var origSpan=$(".iAmSpartacus")
origSpan.html("My classes are: " + origSpan.prop("class")) 

$("#daButton").on("click", function(e) {
  
  var newSpan = $(".iAmSpartacus").clone();
  newSpan.removeClass("iAmSpartacus");  // remove the dup targetting class
  newSpan.appendTo('.edcparent');
  newSpan.html("My classes are: " + newSpan.prop("class")) 
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="daButton">Click me</button>
<div class="edcparent" style="border: 1px solid red;">
    <span class="ecaddingspan iAmSpartacus" style="display: block;">I am a span</span>  
</div>