我需要替换jQuery集中唯一只包含一个元素的项。我收到这个jQuery对象作为我的函数的参数。所以我不能做到以下几点:
myJQuerySet = myJQuerySet.replaceWith( anotherDomElement );
我发现这个技巧可以完成这项工作:
myJQuerySet[0] = anotherDomElement;
但它是否正确且安全?
答案 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构造函数最简单的退化使用,我想到不使用它的唯一原因是你是微观优化。不。