8

これをより簡潔な方法で行うことはできますか?

var src = $('div');
var dest = [];

for ( var i = 0; i < src.length; i++)
    dest[i] = $(src[i]);

私はこれしか考えられませんが、これはまだかなり冗長です。

var dest = [];
$('div').each(function() { dest.push($(this)); });

jQuery はこの場合により良いものを提供しますか? 見つからない。


コメントで繰り返される質問のいくつかに対処するには:

src[i]はすでに jQuery オブジェクトなので、呼び出しても何も起こりjQuery(src[i])ません。

いいえ、これは単純な DOM ノードであり、jQuery ラッピングはまったくありません。

好奇心から、なぜそれをするのですか?

後で、各要素を個別にかなりいじる必要があるからです。たとえば、それらすべてを調べて最も高いものを見つけ、残りを同じ高さに設定する必要があります。その後、すべての幅を取得し、それに基づいてレイアウトを実行する必要があります (各要素は、他の要素の幅に基づいて x & y 座標を取得します)。等。

jQuery が提供する簡略関数を使用できれば、これらすべての操作をより簡単に行うことができますが、それは、各要素を個別にラップする必要があることを意味します (それらすべて$('div')のラッパーを返すだけです)。また、すべての要素を複数回訪問する必要があるため、訪問のたびにではなく、各要素を 1 回だけラップすることでパフォーマンスを向上させたいと考えています。

4

2 に答える 2

1

dom ノードを jQuery オブジェクトに再変換しないでください。

このようなことを試してみてください。

var src = $('div');
var dest = [];

for ( var i = 0, l = src.length; i < l; i++) {
    dest[i] = src.eq(i);
}

console.log(dest);

またはさらに良いことに、

var src = document.getElementsByTagName('div');
var dest = [];
for ( var i = 0, l = src.length; i < l; i++) {
    dest[i] = $(src[i]);
}
console.log(dest);


私はjs perfがあまり得意ではありませんが、ここにテストがありますhttp://jsperf.com/eq-vs-vs-vanilla

于 2013-05-16T10:07:45.720 に答える