私はいくつかのHTMLを生成するためにMustacheを使い、insertAdjacentHTML
を使ってそれをページに配置しました。それは後でdocument.querySelector('.contentarea')
呼び出しを使用してそれに対処することができるので、明らかにDOM構造に変換されました。しかし、幅または高さのピクセル値を取得しようとすると、'auto'
が返され続けます。getComputedStyleは、要素の作成直後にピクセル値に対して 'auto'を返すのはなぜですか?
getComputedStyle
で問題が発生する可能性がありますので、代わりに.getBoundingClientRect
と.offsetWidth
を試してみました。どちらも0
です。 setTimeout(function(){}, 1)
の中にコールを置くことでコールを少し遅らせると動作しますが、これは同期コンストラクタ内に入る必要があるため、私のプロダクションコードでは実用的ではありません。
これはFirefox(Aurora)とChromeの両方で発生しています。 私は、Mozillaが怠惰なフレーム構造を使用してDOM操作のパフォーマンスを改善する方法についての記事を読んで思い出したし、フレームは少しすぎ怠けているとバグがあるかもしれないと思ったが、それは同様Chromeで起こっているので、それは可能性が低いと思われます。
誰もがここで何が起こっているのかについての任意のアイデアを持っていますか、それを回避する方法? HTMLを挿入した直後のピクセルの高さ/幅の情報が本当に必要です。
PS:任意のブラウザでは、別のスレッドでDOM解析/建物にHTMLをしますか?私はこのような振る舞いを引き起こすかもしれないと考えていました。
NEVERMIND:それは私自身のせいでした。コードを測定しようとする前に設定されたdisplay: none;
スタイルに気付かなかっただけです。
関連するコードを投稿できますか?そして、HTMLが見えて、再フローが発生するでしょうか?ブラウザを強制的に再表示させるには、offsetTop、offsetLeft、offsetWidth、offsetHeight、scrollTop、scrollLeft、scrollWidth、scrollHeight、clientTop、clientLeft、clientWidthのいずれかを使用できるようにする必要があります。 clientHeight、またはgetComputedStyle()(IEのcurrentStyle)です。 – skyline3000
あなたはそうです。先行するすべてのコード行を探し回り、最終的に親要素の1つに 'display:none; 'を早期に設定していたことがわかりました。 – download