Jquery .clone()方法。删除克隆

时间:2015-06-02 04:46:33

标签: javascript jquery

在处理.clone()函数时,我注意到了一些有趣的行为。

如果我有一个像这样动态创建行和列的函数:

function appendDiv(n) {
    for (var i=0;i<n;i++) {
        $rows.append($columns.clone()); //assume I put $('.rows') & others in a var
    }
    for (var i=0;i<n;i++) {
        $wrapper.append($rows.clone());
    }
}

然后我删除DOM中的元素可能是这样的:

    function deleteClones() {
    $wrapper.off();
    $wrapper.html('');
    $('body').append($wrapper);
    num = prompt("Enter another number.");
    return num;
}

所以我按照这样的顺序调用函数:

appendDiv(num);
num = deleteClones();
appendDiv(num);

有人可以告诉我为什么在删除这些元素后再次调用appendDiv(num);时,旧列会与新列一起添加吗?以下是我所说的学前班级示范:http://jsfiddle.net/wj6sgeeu/。请注意,在检查html文档时,当我们第二次调用deleteClones()时,我们再次添加在调用appendDiv(num)之前创建的克隆。

我是jquery的新手,所以也许这是一个不言而喻的明显事实(可能使用不同的方法来删除克隆?)但有人对这种行为有解释吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要从行中删除以前添加的列,否则您只是不断向现有列添加更多列

function appendDiv(n) {
    $rows.empty();
    for (var i = 0; i < n; i++) {
        $rows.append($columns.clone());
        console.log('ok');
    }
    for (var i = 0; i < n; i++) {
        $wrapper.append($rows.clone());
        console.log('ok2');
    }
}

演示:Fiddle