【发布时间】:2015-10-26 17:54:01
【问题描述】:
我正在克隆一个元素并将其添加到 DOM。我预计新创建的克隆元素中的this 会引用自身,但它似乎引用了原始克隆元素。
为了说明,我创建了以下脚本。通过单击“cloneIt”,添加了一个新元素,单击新元素后,this 引用原始克隆。我希望data('type') 显示“已添加”。
如何克隆元素并让回调与新克隆的对象相关?
$('.fileupload').fileupload({
start: function (e, data) {
console.log('start', this, $(this).parent().data('type'));
}
})
.on('fileuploadsubmit', function (e, data) {
console.log('fileuploadsubmit', this, $(this).parent().data('type'));
});
$('#cloneIt').click(function () {
$('#clone').clone(true).removeAttr('id').data('type', 'added').appendTo('#container');
});
#clone {
display:none;
}
<button id="cloneIt">cloneIt</button>
<ul id="container">
<li id="clone" data-type="clone">
<input class="fileupload" name="file" type="file" />
</li>
<li data-type="existing">
<input class="fileupload" name="file" type="file" />
</li>
</ul>
【问题讨论】:
-
不确定你究竟在追求什么,但如果你定义了
$('.fileupload')并且然后创建了一个克隆,它将不会被包括在内。更改数据属性似乎仅在使用.attr('data-type', 'added')时有效。 -
@Shikkediel
.attr()提供了相同的结果。见jsfiddle.net/fq4rqc1u/5。我将$('.fileupload')应用于#clone以及具有data-type的data-type和existing的另一个input,这两个似乎都有效。但是,当我克隆时,它会保留现有的数据值。也许某种回调函数而不是直接访问this? -
console.log($(this).parent().index());记录了什么? -
@Roamer-1888 编辑:
0. -
好的,这符合你的意思 - 开始回调中的
this可靠地指向原始元素,而不是克隆。
标签: javascript jquery dom clone