3

理由はわかりませんが、IE9互換ビューまたはIE7でIEからこれを実行すると、clientWidthとclientHeightは常にゼロを返します。それは他のすべてのために働きます。問題のある非常に単純なコードスニペット(あなたも試してみることができるように):http: //jsfiddle.net/nz2DA/

上記のコードスニペットは次のとおりです...次のHTMLスニペットを含むページがあります。

<div id='aaa'>aaaaaa</div>​

そして、clientWidth関数とclientHeight関数をテストするための私のJavaScriptは次のとおりです。

var el = $('#aaa')[0];
alert('Client width and height: '+ el.clientWidth + ' X ' + el.clientHeight);​

IE7またはIE9互換モードで実行すると、常に「0X0」のアラートがポップアップ表示されます。

どんな助けや説明も本当にありがたいです。ありがとう!

4

3 に答える 3

5

これは、IEの「hasLayout」プロパティが原因で発生しており、div自体には「レイアウトがありません」。詳細については、http://www.satzansatz.de/cssd/onhavinglayout.htmlを参照してください。

幸いなことに、要素をトリガーしてレイアウトを設定できます。そのため、上記の回答で「float:left」スタイルを追加すると機能します。ページを変更しないものの、使用できるトリガーは他にもあります。これにより、clientWidthとclientHeightの適切な値が得られます。

<div id="aaa" style="zoom: 1">aaaaaa</div>

記事には、「min-width:0」の設定も機能するはずだと書かれていますが、私にはうまくいきませんでした。「display:inline-block」の設定は問題なく機能しましたが、ページが変わる可能性があります。これらのトリガーをCSSで設定して、HTMLをまったく変更する必要がないようにすることができます。

于 2013-02-26T15:21:12.863 に答える
2

私はあなたのコードをテストしました、そして以下は観察です。

IE(sucks!)では、「aaa」要素にスタイルを適用しなかった場合、IEは幅と高さを計算しません。したがって、JSは単に0を返します。しかし、IE devツールバーからボックスモデルを見ると、いくつかの値がわかります。したがって、float:leftその要素を使用すると、JSは正しい値を返し、すべてのブラウザーで同じ出力が得られます。

jQueryを使用しているので、またはwidth()を使用しないのはなぜですか。これらのメソッドは、すべてのブラウザーに対して一般化されています。単純に使用すると、スタイルを適用しなかったため、幅が非常に大きくなります。IEでは、要素にfloat値がない場合、その親の幅を取得します。あなたの場合は、ウィンドウの幅です。outerWidth()innerWidth()width()

したがって、正しい幅と高さを取得するようにコードを変更すると、次のようになります。

HTML:

<div id="aaa" style="float:left;">aaaaaa</div>

JS:

var el = $('#aaa')[0];
alert('Client width and height: '+ el.clientWidth + ' X ' + el.clientHeight);

さらに詳しい説明が必要な場合はお知らせください...乾杯!

于 2013-02-22T12:59:54.287 に答える
0

InternetExplorerのoffsetHeightプロパティを試してください。

于 2013-12-12T12:50:16.060 に答える