ダン、私はそれを理解しました... 以下を参照してください。私がクエリしていたdivレイヤーは、CSSを介して非表示になり、位置クエリの後にJSで表示されました。非表示になっているのを見たことがなかったので、非表示になっていることに気づきませんでした。そのため、jQueryは0,0を返しました。
私は馬鹿のように感じます。
以下のコードは説明を目的としたものであり、必要と思われるすべてのコードが含まれていますが、重要なCSS定義と重要なJS呼び出しが省略されています。
メニュー項目用のいくつかのサブdivレイヤーを持つdivレイヤーがあります。
<div id="menuItems">
<div id="menuItem0">Menu Item 0</div>
<div id="menuItem1">Menu Item 1</div>
</div>
位置と寸法は外部CSSで定義されます。
#menuItem0 { top: 0px; left: 100px; height: 40px; width: 200px; background-color: green;}
#menuItem1 { top: 0px; left: 350px; height: 40px; width: 200px; background-color: red;}
そして、ロード時に、スクリプトはメニュー項目の位置と寸法を表示することになっています。
$(window).load(function () {
prepareMenuItems();
});
function prepareMenuItems() {
var numberOfMenuItems = $("#menuItems").children().length;
for (var i=0; i<numberOfMenuItems; i++) {
console.log("left: "+$("#menuItem" + i).position().left +
" top:" + $("#menuItem" + i).position().top +
" w:" + $("#menuItem" + i).width() +
" h:"+ $("#menuItem" + i).height());
}
}
私のライブデモでは、Google Chrome(最新)に表示されるものは次のとおりです。左:0上:0 w:200 h:40左:0上:0 w:200 h:40
左と上は、あるべきではないときにゼロです。
ページが読み込まれ、しばらくすると、Chromeデバッガーが$( "#menuItem0")。position()。leftの時計を適切に評価します。しかし、なぜそれはロードされないのですか?それは正しい幅と高さを吐き出すので、CSSは明らかにロードされています。そして、強制的な休憩が正しい答えを与えるので、後で答えを知っているので、これは私が間違ったものの位置を見ているのではありません。
ヘルプ!それは私を怒らせています。
(以前のタイプミスについては、文字通りではなく説明しようとしていたのですが、人々が特定のコードをテストすることに気づいていませんでした。 マグリットはFiddlerを介してテストし、コードは期待どおりに機能するため、外部参照と関係があるはずです。 CSSやJSなどに...)。