[解決済み] jQuery - 非表示時の要素の幅を取得する (Display: None)
2022-10-01 01:42:45
質問
jQueryでは、要素が表示されていないときwidth()は0を返すようです。理にかなっていますが、私は親を表示する前に親の幅を設定するために、テーブルの幅を取得する必要があります。
下記のように、親の中にテキストがあり、それは親を歪ませ、厄介に見せています。 私は、親がテーブルと同じ幅だけで、テキストが折り返されるようにしたいのです。
<div id="parent">
Text here ... Can get very long and skew the parent
<table> ... </table>
Text here too ... which is why I want to shrink the parent based on the table
</div>
CSSです。
#parent
{
display: none;
}
ジャバスクリプトです。
var tableWidth = $('#parent').children('table').outerWidth();
if (tableWidth > $('#parent').width())
{
$('#parent').width(tableWidth);
}
tableWidthは可視化されていないので常に0を返します(可視化されているときは数字を与えるので私の推測です)。 親を表示させずにテーブルの幅を取得する方法はありますか?
どのように解決する?
私が使用したトリックを紹介します。 これは、いくつかの CSS プロパティを追加して、jQuery が要素を表示されていると考えるようにしますが、実際にはまだ非表示になっています。
var $table = $("#parent").children("table");
$table.css({ position: "absolute", visibility: "hidden", display: "block" });
var tableWidth = $table.outerWidth();
$table.css({ position: "", visibility: "", display: "" });
ハックのようなものですが、私の場合は問題なく動作しているようです。
UPDATE
その後、私は ブログ記事 を書きました。 上記の方法は、CSS プロパティを空の値にリセットしているため、問題が発生する可能性があります。 以前は値があった場合はどうでしょうか。 更新されたソリューションは、jQueryのソースコードで見つかったswap()メソッドを使用しています。
参照されたブログ記事からのコードです。
//Optional parameter includeMargin is used when calculating outer dimensions
(function ($) {
$.fn.getHiddenDimensions = function (includeMargin) {
var $item = this,
props = { position: 'absolute', visibility: 'hidden', display: 'block' },
dim = { width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0, outerHeight: 0 },
$hiddenParents = $item.parents().andSelf().not(':visible'),
includeMargin = (includeMargin == null) ? false : includeMargin;
var oldProps = [];
$hiddenParents.each(function () {
var old = {};
for (var name in props) {
old[name] = this.style[name];
this.style[name] = props[name];
}
oldProps.push(old);
});
dim.width = $item.width();
dim.outerWidth = $item.outerWidth(includeMargin);
dim.innerWidth = $item.innerWidth();
dim.height = $item.height();
dim.innerHeight = $item.innerHeight();
dim.outerHeight = $item.outerHeight(includeMargin);
$hiddenParents.each(function (i) {
var old = oldProps[i];
for (var name in props) {
this.style[name] = old[name];
}
});
return dim;
}
}(jQuery));
関連
-
[解決済み] jQueryを使って要素のIDを取得するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryで要素にスクロールする
-
[解決済み] jQueryを使ってドロップダウンリスト(セレクトボックス)から選択されたテキストを取得する
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] jQueryで現在のURLを取得する?
-
[解決済み] jQueryで名前を指定して要素を選択するには?
-
[解決済み] スクロールした後に要素が表示されているかどうかを確認するには?
-
[解決済み] jQueryで多段式フォームをリセットする
-
[解決済み] jQuery / JavaScriptでJSONデータをパースする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScript - 二重引用符のエスケープ
-
[解決済み] 複数のクラスを削除する(jQuery)
-
[解決済み] jQuery.ajaxでmultipart/formdataを送信する。
-
[解決済み] jQueryでオブジェクトに登録されたイベントハンドラを検索する
-
[解決済み] Bootstrapのモーダルを閉じる
-
[解決済み] jQuery OR Selector?
-
[解決済み】jQuery: jQueryでhidden要素の高さを取得する
-
[解決済み】jQueryのテンプレートエンジン【終了しました
-
[解決済み】$(window).width()がメディアクエリとは違う
-
[解決済み] Jqueryのコードはヘッダーとフッターのどちらに入れるべきですか?