1

含まれているテキストを変更した後、タグのサイズを取得する際に問題が発生します。私は現在、私が満足することにはほど遠い解決策を持っています。これは私が持っているものです(コーヒースクリプトの謝罪、()=>はfunction(){}を意味します)

@textField = $('<'+tag+'></'+tag+'>')
@textField.html(text).delay(120).queue(()=>
    @textField.ready(@onTextReady)
)

遅延を削除すると、height()がなくなり、window.loadも使用できなくなり、@textfield.loadはまったく何もしないように見えます。

これを解決するためのベストプラクティスについてどう思いますか?

とても有難い

/ A

4

2 に答える 2

0

JavaScript のシングル スレッドの性質と、ブラウザによる HTML のレンダリング方法のためです。要素を DOM ツリーに追加しても、レンダラーが要素を描画したり、要素のプロパティを計算したりしたことを自動的に意味するわけではありません。要素を DOM ツリーに追加してから、JavaScript スレッドから抜けて、レンダリング後に実行されるように、キュー内の要素のプロパティにアクセスするコード。

element.appendChild(aChild); // Adding a child to the DOM tree    
setTimeout(function() {
    aChild.height;           // Accessing the height of the element
},0);                        // Setting the timeout to 0 so that the code
                             // is executed immediately

実際、それはあなたのアプローチで行っていることです。delay() を追加し、そのタイムアウト後にコールバックを実行します。

これにより、このそれほど珍しくない問題についてさらに多くの洞察が得られたことを願っています。

于 2013-02-19T10:57:09.917 に答える
0

私の知る限り、要素はDOMに追加されるまでサイズがありません。それ以上はサイズや表示に問題はないと思います。サイズだけに興味があり、要素を実際にDOMに追加することに興味がない場合は、可視性を試してみることをお勧めします。

var $textField = $('<div>').text("FOO").css({
    visibility: "hidden",
    position: "absolute",
    display: "block"
}).appendTo($("body"));
var height = $textField.height();
$textField.remove();
alert(height);
于 2013-02-19T10:09:49.617 に答える