18

私の JavaScript には、2 つの要素があります。

2 つの要素をログに記録したところ、次のように表示されます。

要素 1:

ここに画像の説明を入力

要素 2:

ここに画像の説明を入力

問題は:

  • console.log各要素の子 ( )をelement.children取得すると、明らかに要素のリストが返されます。
  • しかし奇妙なことに、1 つの要素は空 (長さ 0) ですが、展開すると 3 つの要素 (長さ 3) になります。

要素の子について以下のログを読むと、私が話していることが理解できます...

要素 1 (これは期待どおりに機能しています):

ここに画像の説明を入力

要素 2 (問題のあるもの):

ここに画像の説明を入力

ここで何が起こっているのか誰にも分かりませんか?子供の数について矛盾した報告がどうしてあり得るのでしょうか?

これを修正するにはどうすればよいですか? 子をループする必要がありますが、長さが明らかに 0 であるため、ループできません。

前もって感謝します!すべての助けに感謝します。

4

1 に答える 1

40

オブジェクトをコンソールに記録すると、オブジェクトの現在の状態はスナップショットされず、表示されません (ご想像のとおり)。代わりに、コンソールはオブジェクトへのライブ参照を取得します。コンソールで展開すると、ログに記録した時点ではなく、展開した時点の内容が表示されます。詳細については、この質問とその回答を参照してください。

したがって、ロギングを行うとコレクションが空になり、後で要素を取得するようです。コレクションが作成されるまでコードを待機させたいだけです。たとえば、スクリプトの実行直後にこれを行う場合は、スクリプトをドキュメントの最後、終了</body>タグの直前に配置することを検討してください。

オブジェクトの横にある非常に微妙な青い (i) アイコンには、便利なツールチップがあります。ホバーすると、次のように表示されます。

ツールチップの発言

「左のオブジェクト値はログに記録されたときにスナップショットされ、下の値は今評価されました」と表示されます。


console.logしかし、一般的には、懐中電灯を持って暗闇の中でつまずくよりも、ブラウザーや IDE に組み込まれているデバッガーを使用してライトをオンにすることをお勧めします。

于 2016-07-29T14:06:44.880 に答える