在处理.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的新手,所以也许这是一个不言而喻的明显事实(可能使用不同的方法来删除克隆?)但有人对这种行为有解释吗?
谢谢!
答案 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