clone div和循环中创建的div之间有什么区别吗?

时间:2014-09-30 10:28:52

标签: javascript jquery html

div克隆和循环中生成的div之间有什么区别吗? 我有两种情况:
div 1:

$('.div1').clone(true).insertAfter('.created_form');
div 2:

<div class="div2"></div>

ENDLOOP

我在每个div中都有一个按钮,用于在按下按钮时删除div。 但删除按钮仅适用于克隆的div(div1) 因为div 2不起作用。
我删除div的代码是:

$('.buttons').on('click', '.minus_sign', function() {
        var parent_id = $(this).parent().attr('id');
        $("#"+parent_id).remove();
        $("input[name='"+parent_id+"']").remove();              
    });

有人可以告诉我为什么这两个都不合适吗?我提到div是exaclty相同,只有id是不同的!谢谢

2 个答案:

答案 0 :(得分:0)

那是因为没有克隆创建的那个没有id属性。

<div class="div2"></div>

但是,如果你给它一个id:

<div id="myDiv" class="div2"></div>

它会起作用。

答案 1 :(得分:0)

假设原始元素具有id属性,那么您在循环内创建的属性并不具有此answer中提到的id属性。

即使它有一个,因为您使用.clone(true),克隆将拥有克隆元素的数据和事件处理程序。

但是在内部循环中创建的那个不包含事件处理程序。

由于您将.minus_sign的点击委托给也是动态创建的按钮,因此事件委派无效。

您应该将事件处理程序委托给静态元素,例如

$(document).on('click', '.buttons .minus_sign', function() {
    var parent_id = $(this).parent().attr('id');
    $("#"+parent_id).remove();
    $("input[name='"+parent_id+"']").remove();              
});

BTW,由于remove()方法返回已删除的元素,您可以执行上述操作,如

 $(document).on('click', '.buttons .minus_sign', function() {
    var parent_id = $(this).parent().remove().attr('id');
    $("input[name='"+parent_id+"']").remove();              
});