2011-01-08 10 views
6

DOMエレメントを動的に作成しています(具体的には、jQueryを使用して、css "width:auto"のテキストを含むDIVを作成し、 "font-face"フォント、ページのOnLoadイベント)、divの幅が予期されたサイズ(具体的には幅が間違っている)でないことがわかりますすぐに私はそれを作成してDOMツリーに追加します。要素の幅/高さを知る必要があります。なぜなら、動的レイアウトをいくつか実行しているからです。すべての作品は、この余分なタイムアウトと私のレイアウトの完成を遅らせることにより新しく作成されたDOMオブジェクトの正確な寸法の取得

のSetTimeout(complete_layout、100)

:回避策として

は、私が要素を作成した後、次のコードを使用します(Ubuntu Linuxの最新のChromeで)

しかし、このklugeyタイマーの遅延は私の感性を害し、明らかに危険です...正確に強制する方法はありますか特定のコマンドで次元の計算?または、新しい動的要素が作成された後、DOM要素が正しくサイズ変更された後にのみ起動できるイベントが登録できますか? (私は画像がロードされた後にイメージの適切な寸法を把握できるIMG onloadイベントのようなものを描いています)

tl; dr:新しく作成されたDOMオブジェクトは正確になりますか?

ありがとうございました!

+0

あなたがDOMにそのDIVを追加した後は、他のDOM操作をやっていますか? –

+0

いいえ、私はちょうど$(「#fooという」)を行います。追加($(「

...
」))とDIVの適切なサイズを決定する必要があり、CSSを持っている。すぐに、私は幅をチェックすると、それは間違っている。しかし、私はタイマーを100msのを遅らせた場合、それはcorrecですt。私は、新しく作成されたDOMオブジェクトの寸法が正確であることが保証されているときに記述する情報をオンラインで見つけることはできません。 – drcode

+1

問題を再現する少しのコード削減を投稿すると、良い答えを得ることができます。これにはhttp://jsbin.comとhttp://jsfiddle.netが便利です。もしあなたがそうしたとしても、あなた自身で問題を解決することさえできます。 – Hemlock

答えて

3

どのように幅を取​​得しようとしていますか? .css( "width")、または.width()、

.css( "width")と同じように.width()を使用する必要があります。 )

$("#foo").width(); 

それもすぐに付加した後の幅を与える必要があります。

+1

私は$( '#foo')とouterWidth()を使用しています。より多くのオンライン調査をした後、「すぐに追加した後でも幅を与えるべきだ」とあなたは正しいと思います。これは、おそらく私がさらに研究しなければならないChromeのバグを扱っていることを示唆しています。 – drcode

+0

@drcode私はFirefoxで3年も同じ問題を抱えています。私はそれがクロムバグだとは思わない。同じ要素は、jQueryによって追加され、スタイル付けされた直後に、違った、間違った幅と高さを与えています。解決策は見つかりましたか? – user568458

+0

ここでは、個々のフォント文字のテキストエクステントをオフラインであらかじめ計算しておき、DOMをまったく使用せずに自分のJavaScriptコードで幅を計算して見積もっています。ブラウザのテキストカーニング計算が単純化されているため、エラーのピクセル数を受け入れることができれば、人生をはるかに簡単にすることができます。 – drcode

0

新しいdivを追加する要素の幅を取得することで、幅を取得できます。新しいdivの幅はautoに設定されているので、同じdivにする必要があります。

これは高さに対しては機能しません。

+0

私はあなたが言っていることを理解していません...新しいDIVには、新しいDIVの幅を決定するテキストがあります。これは私が把握しようとしている幅です。それはターンが拡大中の自動デフォルトその後、私はどのように問題にで親DIVの数字の幅はわからないんだけど、何の幅スタイルがDIVに設定されていない場合は、多分私は私の質問には、十分に明確:) – drcode

+0

ませんでした親の幅まで。 –

+0

多分私は間違っているか何かを逃しているかもしれませんが、私は "幅:自動"のDIVの幅は、親の幅ではなく、_own_の内容の長さと同じであると考えました。唯一の例外は、親がdivのコンテンツの幅よりも小さい幅を持っている場合です(私の場合、コンテンツは単なる単語で親の幅よりもはるかに小さい) – drcode

関連する問題