jQuery:在克隆父母中找到克隆的孩子?

时间:2010-09-02 21:43:22

标签: javascript jquery clone

假设我有这个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;
        }
    });
};

3 个答案:

答案 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');
    });
};