更改jQuery集而不生成新的jQuery对象

时间:2012-01-18 15:27:30

标签: jquery

我需要替换jQuery集中唯一只包含一个元素的项。我收到这个jQuery对象作为我的函数的参数。所以我不能做到以下几点:

myJQuerySet = myJQuerySet.replaceWith( anotherDomElement );

我发现这个技巧可以完成这项工作:

myJQuerySet[0] = anotherDomElement;

但它是否正确且安全?

3 个答案:

答案 0 :(得分:2)

考虑how jQuery handles DOM elements passed to jQuery(),这应该没问题:

(function($) {
    $.fn.set = function(element) {
        if(element.nodeType) {
            this.context = this[0] = element;
            this.length = 1;
        }
        return this;
    };
}(jQuery));

如果选择了多个元素,则不确定后果。您可能还想检查jQuery对象的当前长度。

在这方面同样有趣的是jQuery.merge,它通常在创建新集或添加元素时使用。它实际上只是将所有数值属性从一个参数复制到另一个参数并更新length属性。所以你正在做什么似乎没问题,但当jQuery改变内部表示时(如果他们这样做的话),当然会中断。

答案 1 :(得分:1)

我唯一能看到这是一个问题的时候是jQuery集是空的; length属性不会更新。如果你可以保证尺寸至少为1,那么你没事。

否则,您可能想要做类似的事情;

myJQuerySet[0] = anotherDomElement;
myJQuerySet.length = myJQuerySet.length || 1; 

答案 2 :(得分:0)

您已经指定此jQuery对象中只有一个项目。

您还指定要将一个元素放入其中。

那么创建一个新的jQuery对象实际上有什么问题?

$(myElement)

这是jQuery构造函数最简单的退化使用,我想到不使用它的唯一原因是你是微观优化。不。