jQuery集合是array-like Objects,其长度属性和方法来自Array.prototype
,如splice
, sort
, and push
。我知道这些方法不像典型的jQuery方法那样可链接,但方法确实可以正常工作。
是否有任何理由不使用Array.prototype
方法来操纵jQuery集合,例如浏览器兼容性或其他jQuery方法的问题?
在循环中,将元素添加到jQuery集合中以供稍后操作。
var $divs = $(); // Create empty jQuery collection.
for (i = 0; i < 8; i++) {
var div = document.createElement('div');
div.innerHTML = i+1;
$divs.push(div); // Add newly created div to collection
}
$divs.addClass('red').appendTo(document.body);
在此使用push
代替$divs = $divs.add(div);
更简洁,效率更高。如果jsperf现在正在运作,我确信它会在push
时表现出更好的效果。
答案 0 :(得分:1)
以下是来自jQuery源代码的.add
:
add: function( selector, context ) {
return this.pushStack(
jQuery.uniqueSort(
jQuery.merge( this.get(), jQuery( selector, context ) )
)
);
},
在此功能中,还有3种方法被称为...... .merge
,.uniqueSort
(实际上是SizzleJS)和.pushStack
......
除了.push
之外,jQuery还将:
.merge
).uniqueSort
).pushStack
)因此,总结一下,如果你担心输入,.add
很好用,因为jQuery使它变得灵活(常规DOM或jQuery对象可以工作),但是它也删除了重复的条目并且可以使用在带有数组的多个项目中。
答案 1 :(得分:0)
您可以传递Array into jQuery,这意味着您可以充分利用原生数组
// build
var j, el, ly = [];
for (j = 0; j < 3; ++j) {
el = document.createElement('span');
ly.push(el);
}
// wrap
var jq = $(ly); // jQuery object [<span>, <span>, <span>]
可以使用pushStack和另一个数组
来添加更多元素jq.pushStack([document.createElement('div')]);
jq; // [<span>, <span>, <span>, <div>]
或者更一般地使用add接受普通 jQuery 构造函数所需的任何输入
jq.add(document.createElement('hr'));
jq; // [<span>, <span>, <span>, <div>, <hr>]