有人可以向我解释为什么当我使用jquery .clone()
克隆一个元素时,将其存储在$(windows).data('myclone')
中并将此克隆的数据元素附加到另一个元素,{{1}中存在克隆的数据} 变化? (指向我在html检查器中新创建的元素)
$(windows).data('myclone')
这是在你的控制台中看到它的小提琴。第一个创建的元素只是克隆数据,然后当你追加它时,它会改变它 http://jsfiddle.net/50eu0bnp/
答案 0 :(得分:0)
嗯,对我来说,第一步是删除ID属性,转而使用类属性。来自jQuery.com:
“注意:使用.clone()具有生成元素的副作用 重复的id属性,应该是唯一的。哪里 可能,建议避免使用此方法克隆元素 或者使用类属性作为标识符。“
使用.clone(true)
时会发生什么?这是一个“深层复制”。
答案 1 :(得分:0)
您需要克隆克隆,否则您将重复使用相同的元素。
您还需要仅定位其中一个元素,或者在每个现有class="clone"
元素之后复制它,这会导致创建其他副本。
JSFiddle:http://jsfiddle.net/TrueBlueAussie/50eu0bnp/1/
$('.clone button').on('click',function(){
var cloneNode = $(this).parent().clone();
$(window).data('cloneNode',cloneNode);
});
$('#append').on('click',function(){
var clone = $(window).data('cloneNode').clone(); // Clone the clone
$('.clone:last').after(clone);
});
如果您克隆的元素可能会有所不同(目前它们不同),您需要转移到委派的事件处理程序,因为原始$('.clone button')
未连接到新副本:http://jsfiddle.net/TrueBlueAussie/50eu0bnp/3/
$(document).on('click', '.clone button', function () {
var cloneNode = $(this).parent().clone();
$(window).data('cloneNode', cloneNode);
});
您还需要解决重复id="files"
的问题,因为这是一个完整的禁忌。 jQuery只能看到第一个(例如$('#files')
)因为id必须是唯一的。
答案 2 :(得分:0)
$('.clone button').on('click', function() {
var cloneNode = $(this).parent().clone();
$(window).data('cloneNode', cloneNode);
console.log(cloneNode);
当您获取$(' .clone按钮')时,您将抓取文档中的每个克隆按钮。抓住一个。
$('.clonebutton')[0].on(...)