5

何らかの理由で、jQueryでさまざまな要素の信頼できる幅データを取得できません。問題を示すフィドルへのリンクは次のとおりです。http: //jsfiddle.net/snoopydaniels/ZDbaa/1/

多次元のドロップダウンメニューを作成しようとしています。jsfiddleでわかるように、2番目のネストされたメニューは正しく配置されていません。配置に使用するjQueryは、兄弟アンカー要素をクエリしてouterWidth()その幅を検出し、返された幅に従ってネストされたリストの左側の位置を切り取ります。兄弟アンカー要素にCSSで設定された幅を指定すると、正しい値に近い値が得られますが、その静的な幅がないと、outerWidth()「2」が返されます。

ただし、アンカー要素に一定の幅を指定outerWidth(true)しても、要素の境界線が正しく組み込まれていません。

髪を抜こうとしています。なぜこのようにがらくたが宣伝どおりに機能しないのですか?

4

4 に答える 4

16

さまざまな幅コマンドは、非表示の要素()では機能しませんdisplay: none

cssを使用して幅を設定すると、jqueryはそれを返します。そうしないと、結果が得られないか、意味がありません。

古典的な解決策は、要素を画面の外に配置し、幅を確認してから、非表示にして元に戻すことです。(おそらく、1つのコマンドでそれを実行するjqueryプラグインを見つけることができます。)

時々、htmlやcssを再構築する方法があるので、これを避けてください。

要素を表示した直後にサイズを修正できる場合があります。

に設定して、要素がサイズを取得するようにすることもできますvisibilityhidden、表示されません。デザインによっては、これが機能する場合があります。

于 2012-08-23T05:25:14.737 に答える
1

jQuery幅関数を呼び出すときにランダムな結果のように見えるものを受け取る際にも同様の問題がありました。ブラウザが更新されたとき、私は約50パーセントの時間で正解を得るでしょう。

$(document).ready()関数内でdivの幅をすぐにチェックするのを間違えました。$(window).load()内でouterWidth()を呼び出すように変更すると、常に正しい答えが返されました。

于 2014-03-18T17:27:33.947 に答える
1

$(window).trigger('resize')偽のウィンドウサイズ変更イベントをトリガーするを呼び出す必要があります。その後、outerWidthは適切な値を持つ必要があります。

データが入力されたら、偽のウィンドウサイズ変更イベントをトリガーしていることを確認してください。

つまり、たとえば<td>内側の幅をチェックする場合は、偽のサイズ変更イベントをトリガーしてをチェックする前に、テーブルにデータが入力され、すべてのサイズ変更が行われていることを確認してください。<th>outerWidth

これは、 https: //stackoverflow.com/a/12085210/774630でArielによって言及された制限による回避策です。

于 2016-11-23T00:27:26.693 に答える
0

要素自体に負のマージンがある場合、outherWidth()は無効なデータを返す可能性があります

于 2014-05-09T22:18:00.960 に答える