2009-03-11 4 views
1

earlierから隠された要素の高さを取得する関数Javascriptを書くとき、誰かが私にPrototype関数getDimensions()を呼んでくれました。この例では、「visibility:hidden; position:absolute; display:block;」を設定して、clientHeight が表示されている場合にはとなるようにすることができます。その後、彼らはそれをすべて元に戻し、あなたのビジネスについて行くことができます。私はプロトタイプを使っていないが、それはうまくいくと思うだろう。しかし、私自身のコードで同じ関数を模倣しようとすると、 "position:absolute;"測定を中止した。これを使わなくてもうまく動作しますが、その使い方は設計を歪ませずに1秒間にこれを行うことができるものです。私のバージョンは以下の通りです。それがなぜ機能しないのでしょうか?Javascript clientHeight inconsistency

var objStyle = obj[objName].style; 

    // Record original style values 
    var visibility = objStyle.visibility; 
    //var position = objStyle.position; 
    var display = objStyle.display; 

    // Modify object for measuring 
    objStyle.visibility = "hidden"; 
    //objStyle.position = "absolute"; 
    objStyle.display = "block"; 

    // Measure height 
    height = obj[objName].clientHeight; 

    // Fix object 
    objStyle.visibility = visibility; 
    //objStyle.position = position; 
    objStyle.display = display; 

    // Return height 
    return parseInt(height); 

ご協力いただきありがとうございます。

+0

どのブラウザをテストしていますか? 「作業していない」とは、エラーが発生したことを意味しますか? 0?何? –

+0

上記のとおり、測定値が不正確です。私が正しく覚えていれば、40〜50ピクセル程度の正確な高さに達していないことがわかりました。ありがとうございます – bloudermilk

+0

ページ上にdoctypeを使用していますか? –

答えて

0

表示されていないときに動作するかどうかわかりませんが、jQueryにはいくつかのオプションがあります。特にheight functionです。一見の価値がある?あなたの例に基づいて、次のようなものがあります:

height = $(obj[objName]).height(); 
0

これはセタンブラウザまたはすべてのブラウザでのみ表示されますか? PrototypeのgetDimensions()はSafari(そしておそらく他のバグの多いブラウザ)のチェックを行います。あなたのコードにそのコードを入れて、それが問題を解決するかどうかを調べるべきです。

これは、document.getElementById() - AFAIKとは対照的に、obj [objName]を使用している可能性もあります。これらは、少し違うオブジェクトを返すため、表示されている不一致が発生する可能性があります。

+0

私は自分のコードをもっと投稿したはずです。 obj [objName]はgetElementById()で取得したオブジェクトを保持する配列への参照です。 私は昨夜のWebKitビルドとFirefox 3.0.7でSafari 3で自分のコードをテストしました Prototypeは私の場合、表示がnone – bloudermilk

0

私は通常.offsetHeight、のようなもので、私の高さを測る:

するvar H =のdocument.getElementById(divname).offsetHeight。

私は何かを測定する必要があるとき、position:absolute;

私は通常、2つの列があり、1つが絶対的なときにこれを実行します。もう1つの列より大きい場合、絶対的なもので親をプッシュダウンする必要があります。他の列の高さよりも大きい場合は、offsetHeightを使用して親の高さを設定します。

関連する問題