2011-07-18 19 views
4

私はIE Quirksモードでボックスモデルの問題を修正するために、contenteditable = trueでいくつかのDIVの高さを調整しています。jQueryで実際のCSS値を取得する方法は?

div要素のスタイルは、次のとおりです。

height: 14px; 
padding: 6px; 
border: 1px solid black; 
overflow: hidden; 

は、これまでのところ私は$("selector").css("height")を使用してCSSの高さの値を取得し、更なる計算のためにその値を使用しますが、最近では、最新のバージョンに私のjQueryライブラリを更新してきたし、このメソッドは現在壊れています。

詳細を説明します。 in jQuery 1.4.2 .css("height")は '14px'を返しますが、jQuery 1.6.2は要素とその祖先がすべ​​て表示されている場合は '0px'を返し、それ以外の場合は '14px'を返します。

私は前者がIE Quirksmodeボックスモデル(14px高さ - 2x 6pxパディング - 2x 1pxボーダー= 0px)を使用して計算され、後者がスタイルシートから直接取得されていると推測しています。私は可視性にかかわらず元を取得したいと思います - 実際のCSS値( "かなり"、document.styleSheets配列でそれを見ていないことを意味する)を取得するための "かなり"方法はありますか?

編集:

まず第一に、私はdiv要素の重要なスタイルプロパティを忘れてしまった:overflow: hidden(今修正)。

また、この問題は、QuirksモードでInternet Explorerでのみ発生することを強調することが重要です。私が知っている限り、それは他の(現在の)ブラウザ/モードでは問題ではありません(私はすべてをテストしていないので、100%は確信していません)。 jQueryの1.4.2

Element visible: true 
.css('height'): 14px 
.height(): 0 
.outerHeight(): 14 

Element visible: false 
.css('height'): 14px 
.height(): 0 
.outerHeight(): 0 
さらに問題について詳しく説明(および可能な解決策のいくつかの提案を答える)私はフィールドとjQueryで異なる機能によって返される値にはほとんどのテストを実行したために

のjQuery 1.6.2:マージンは関係なく、ボックスモデルの影響を与えないよう

Element visible: true 
.css('height'): 0 
.height(): 0 
.outerHeight(): 14 

Element visible: false 
.css('height'): 14px 
.height(): 14 
.outerHeight(): 28 

.outerHeight(true)は、私には役に立ちません。要素の可視性は、$("selector").is(":visible")を使用してテストされました。

右の番号はどのように使用するのですか?私は次の計算をしなければならないボックスモデルの身長修正するには:つまり

newHeight = oldHeight + borderWidth (top & bottom) + padding (top & bottom) 

を、私は14px値を必要としています。 1つは、問題の解決策が、.css('height')の値を取得しているときに要素が表示されているときに、その値を把握することであると主張することができます(現時点で私が現在行っていることです)。元の質問。実際のCSS値を取得するにはどうすればよいですか?

完全性のために、テストのマイナンバーを複製するHTML /スクリプトの例を示します(実際のテストは行っていませんが、最終結果は同じです)。IEをテスト前Quirksmode):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <script src="http://code.jquery.com/jquery-1.6.2.js" type="text/javascript"></script> 
     <style> 
      .input { 
       height: 14px; 
       padding: 6px 8px; 
       border: 1px solid black; 
       overflow: hidden; 
      } 
      .hidden { display: none; } 
     </style> 
    </head> 
    <body> 
     <div><div class="input" contenteditable="true">test</div></div> 
     <div class="hidden"><div class="input" contenteditable="true">test</div></div> 
     <script type="text/javascript"> 
      $(document).ready(function(){ 
       var t = ""; 
       $(".input").each(function(){ 
        t+= "visible: " + $(this).is(":visible") +"\n" + 
          ".css('height'): " + $(this).css("height")+ "\n" + 
          ".height(): " + $(this).height()+ "\n" + 
          ".outerHeight(): " + $(this).outerHeight()+ "\n\n"; 

       }); 
       alert(t); 
      }); 
     </script> 
    </body> 
</html> 
+0

http://jsfiddle.net/pCHLB/問題はないようです。 'css(" height ")メソッドは何も計算しないことを覚えているように、対応するCSSプロパティの値を表示するだけです。 'height()'メソッドは何らかの計算を行います。 –

+0

trueの場合、隠されているかどうかにかかわらず同じ値が返されます。 – Woodgnome

+0

http://jsfiddle.net/pCHLB/1/ - だから –

答えて

0

あなたは実際の高さを取得するために.height()を使用することができます。さらに、.innerHeight()を使用してパディングを含む要素の高さを取得し、.outerHeight()を使用して、高さ、パディング、境界線、および(オプションで)マージンを取得できます。

+0

問題は、問題の要素の可視性に応じてIE Quirksモードにいるときに、これらの関数がちょっと変わってしまうことです。私は私の元の質問の問題についてさらに詳しく述べました。 – Woodgnome

+0

私はQuirksmodeで互換モードを意味すると思います。これは '' –

+0

に設定することで無効にすることができます。Internet Explorerを開いたときのQuirksモードデベロッパーツール]を選択し、[ドキュメントモード]ドロップダウンで[クワークモード]を選択します。私は通常、このようにQuirksmodeをテストして、常に正しいものに見えるようにします。残念ながら私は問題が異なるCMSに注入されたスクリプトで発生するので、ドキュメントタイプを制御することはできません。 – Woodgnome

4

はい:

$("selector").height(); 

または

$("selector").outerHeight(); 

はあなたの問題を解決しますか?

+1

'outerHeight()'はボーダーとパディングも含んでいるのでより適切です。最初の引数として「真」を渡し、余白も含めます。 –

+3

どちらも実際のCSS値を取得しないので、まだ問題はありません。 – Woodgnome