0

IE で実行しているときに書いた jquery スクリプトでパフォーマンスの問題が発生したため、可能な限り最適化しようとしています。for ループを使用すると、jQuery .each メソッドを使用するよりもはるかに高速です。$(this)これにより、 for ループ内に相当するものに関する質問がありました。ループで行っていることを単純化してattr()、主な根本的な質問に到達するときに関数を使用するだけにします。

私はそれぞれ(簡略化)でこれをやっています

var existing = $('#existing').find('div');
    existing.each(function(){
    console.log($(this).attr('id'));
});

そして、私はそれを for ループとして書き直そうとしました:

var existing = $('#existing').find('div');
for(var i = 0;i < existing.length;i++)
{
    console.log(existing[i].attr('id'));
}

次のようなエラーがスローされます。

Uncaught TypeError: Object #<HTMLDivElement> has no method 'attr'
4

3 に答える 3

2

要素のIDを取得するには、次のようにします

existing[i].id

jQueryループも次のように高速になることに注意してください

existing.each(function(){
  console.log(this.id);
}); 

より一般的にはattr('id')、DOM オブジェクトにはプロパティがあるため、特にパフォーマンスに関心がある場合は、 を使用しないでくださいid

于 2012-12-12T17:02:03.040 に答える
2

existing.eq()オブジェクトを取得する必要があり、jQueryオブジェクトをexisting[]提供しますDOM。関数attr()は jQuery オブジェクトで呼び出す必要がありますが、DOM (javascript) オブジェクトでは呼び出さないでください。

var existing = $('#existing');
for(var i = 0;i < existing.length;i++)
{
    console.log(existing.eq(i).attr('id'));
}

each を使用して、 for ループなしでインデックスを取得できます。

existing.each(function(index, item){
     alert(index);
     alert(item);
});
于 2012-12-12T17:02:31.793 に答える
1

.答えを出す前に質問しなければなりません。なぜ単一の要素に対してループを実行する必要があるのでしょうか。あなたは簡単にできる

$('#existing').prop('id');  

複数の要素がある場合は、クラスまたは別の属性を使用する必要があります。その場合は、次を使用できます。

$.each('.existing',function(index,item){
    console.log(item.prop('id'));
});

attr は非推奨であるため、attr() の代わりに prop() を使用することをお勧めします

于 2012-12-12T17:13:01.713 に答える