私たちは JavaScript で非常に恐ろしい問題に直面しており、誰も解決できないようです。
コンポーネントが実際にページに表示されていない状態で、子やボックスモデル全体などを含む DOM 要素の幅と高さを取得するにはどうすればよいでしょうか?
覚えておいてください:私は提案を探しています。質問に完全に答えていない (または指定されたパラメーターに完全に適合していない) 回答でさえ、役立つ可能性があり、おそらく役立つでしょう。
主な目標: Javascript を介して HTML 要素をページに追加しています。データベースからのサイズとスタイルを持つ HTML 要素です。問題は、それらが誤動作し、通常は配置が悪いことです。パディング/マージンが原因で、ある要素が別の要素よりも大きいため、これらの問題を修正するには実際のサイズを確認する必要があります。
結果として得られるアプリケーションは、BigMacAttack がコメントで説明したように、「サードパーティの HTML コントロールの緊密に編成されたモザイク」となるでしょう。本格的なデスクトップ アプリケーションのように見える必要があり、HTML はそのアイデアを熱心に嫌うようです。私がそれを責めているわけではありません。
とにかく、ここにいくつかのサンプルコードがあります:
JavaScript:
function exampleElement(caption, content) {
this.caption = caption;
this.content = content;
this.rootElement = document.createElement("div");
}
exampleElement.prototype.constructElement = function() {
var otherElement = document.createElement("p");
this.rootElement.className = "exampleElement";
this.rootElement.textContent = this.caption;
otherElement.className = "exampleP";
otherElement.textContent = this.content;
this.rootElement.appendChild(otherElement);
/*I need to know size of the otherElement here*/
/*here goes code adding stuff into rootElement*/
};
window.onload = function() {
var ex = new exampleElement("Hello", "Here's text");
ex.constructElement();
document.body.appendChild(ex.rootElement);
};
CSS:
.exampleElement {
padding: 5px;
margin: 6px;
}
.exampleElement .exampleP {
padding: 20px;
margin: 6px;
}
ここで、ページがウィンドウのサイズと個々のコンポーネントのコンテンツに動的に反応する必要があります。そのため、オブジェクトを表示する前にオブジェクトのサイズを取得できることが重要です。また、オブジェクトの作成が 3 つのフェーズに明確に分かれていることも重要です。
new による作成
DOM ツリーの構築 (constructElement)
ドキュメントへの追加 (本体または別の DOM ツリーへの追加)
建設段階で個々の要素のサイズを把握しておくことが重要です。
これまでのところ、jQuery、DOM の幅と高さの属性を介して測定を試みましたが、いずれもページに直接表示されていない DOM オブジェクトでは機能しません。私が試した別のアプローチは、オブジェクトを document.body に追加し、幅と高さを取得してからすぐに削除するいくつかの関数でした。コンポーネントがかなり複雑になるにつれて、ひどいパフォーマンスとメモリの浪費になります。
.CSS ファイルを完全に削除し、JS を介して直接スタイルを定義するアプローチは、少なくとも私たちの苦境の一部を解決すると思いますが、もっと良い方法が必要です。
より多くのアイデアや提案を得るために報奨金を開始します。答えが質問の境界内に完全に収まっていなくても(どうやって/したかなど)、人を撃つだけです-私が達成しようとしている目標は、JSで生成されたHTMLコントロールが適切に収まるようにすることです。