假设我有这个jQuery扩展方法:
$.fn.foobar = function() {
var clone = this.parent().clone();
};
我得到clone
后,如何找到与this
相同的克隆子元素?
这会有用吗?
$.fn.foobar = function() {
var clone = this.parent().clone();
var cloneOfThis = clone.find(this);
};
还是这个?
$.fn.foobar = function() {
var clone = this.parent().clone();
var self = this;
var cloneOfThis;
clone.children().each(function() {
var $this = $(this);
if ($this === self) {
cloneOfThis = $this;
}
});
};
答案 0 :(得分:3)
你可以尝试给它一些独特的类,可以用来引用适当的元素。
$.fn.foobar = function() {
// Add a class to "this", then clone its parent
var clonedParent = this.addClass("someUniqueClass").parent().clone();
// Reference the new clone of "this" inside the cloned parent,
// then remove the class
var cloneOfThis = clonedParent.find(".someUniqueClass").removeClass("someUniqueClass");
// Remove the class from the original
this.removeClass("someUniqueClass");
};
答案 1 :(得分:1)
你无法在这里使用参考比较,因为this
不在克隆中,它是原始元素,它没有被移动。您克隆的元素 元素位于克隆的父元素中,因此您必须确定“相同”的含义,它是相同的ID,相同的HTML内容,相同的值吗?
你只需要选择一个可以比较的值,因为这里的引用不起作用......你找不到那些不存在的东西:)
答案 2 :(得分:0)
进一步了解帕特里克dw的答案,并结合Felix King的评论,我建议如下:
$.fn.foobar = function() {
return $(this).each(function() {
// Add a class to "this", then clone its parent
var clonedParent = $(this).addClass("someUniqueClass").parent().clone();
// Reference the new clone of "this" inside the cloned parent
var cloneOfThis = clonedParent.find(".someUniqueClass");
//remove the unique class to preserve the original state (other than the clone which is now present)
$('.someUniqueClass').add(cloneOfThis).removeClass('someUniqueClass');
});
};