1

によって返されるコレクションなど、ライブ HTMLCollection または NodeList 内の各要素 (JavaScript のみを使用し、jQuery またはその他の JavaScript ライブラリを使用しない) にアクセスしたいと思います。var elements = document.getElementsByClassName('class-name');

DOM が変更されていない場合は、forループでこれを行うことができます。

for(var i=0; i<elements.length; i++)
{
    //Do something with elements[i]
}

forしかし、ループがまだ実行されていて、 class を持つ要素の追加または削除がある状況ではどうすればよいでしょうかclass-nameelementが削除または追加された場合、インデックスは変更されます。

forでは、whileループが実行elementされていることを確認するにはどうすればよいでしょうかelements

4

3 に答える 3

3

一度に実行されるスクリプトは 1 つだけです。スクリプトの実行中に DOM に発生する可能性がある変更は、スクリプトによって行われた変更のみです。他のすべてのタスク、イベントなどは、スクリプトの実行が完了するまで辛抱強く待ちます。

そう

  • DOM への外部からの変更について心配する必要はありません。
  • コードの変更を追跡する

あなたは大丈夫です。

于 2013-08-14T15:21:29.690 に答える
0

私の知る限り、for ループは非同期ではないため、変更が発生する前に for ループが完全に実行されるか、for ループの前に変更が発生する必要があるため、要素を変更することはできません。

于 2013-08-14T15:18:22.397 に答える
0

「ライブ」コレクションは、人々を驚かせ続ける、本当にぎこちないデフォルトです。querySelectorAllgEBCN よりもサポートされているだけでなく、「ライブ」コレクションではなくスナップショットを返すものを使用することをお勧めします。

コレクションが「ライブ」であるという概念でさえ、混乱を招くことがわかります。ライブではありませんが、基本的にプロパティはゲッターです。たとえば、[i]実際に呼び出します.item(i)。メソッドは、コレクションをライブに見せる要素を動的に取得します。

そして、もっとあります。一部の人々は、ベンチマークが壊れているために大幅に高速であると誤解しているため、これらの方法を使用し続けています。これらのベンチマークでは、直接メソッド呼び出しのみが比較され、要素を取得しようとするまで「ライブ」コレクションが機能しないとは見なされません。

于 2013-08-14T15:30:21.580 に答える