2011-08-10 11 views
5

私は、次のマークアップがある場合:jQueryの問題

<div id="parent" style="width: 300px; height: 300px;"> 
    <div id="child" style="position: relative; left: 0; top: 0; width: 100px; height: 100px;"></div> 
</div> 

をし、次のように?:

私は唯一の方法は次のようになり、その親の子の位置を取得したいです
x = parseInt($('#child').css('left')); // returns 0 as needed 
y = parseInt($('#child').css('top')); // return 0 as needed 

ので、私は、次の手順を実行している場合:

x = $('#child').position().left; // most likely will not return 0 
y = $('#child').position().top; // most likely will not return 0 

位置がオフセットによる方法がないという事実に間違っていますlsoは、祖父母のマージン、パディング、ボーダーを追加します(ボディー要素のデフォルトマージンや他の祖父母要素を使用します)。

私は適切な位置を取る必要があります(私の例では0, 0になります)が、私のためにそれを計算することができるjQueryのメソッドがないと思われますか?

+2

注:$( '#child').css( 'top')は、明示的なtopが指定されていない場合、 "auto"を与えることができます。 –

答えて

7

.position()が正しいです。要素のオフセットの親に対する相対的な値は、xyになります。あなたの#child要素は、それ自身のオフセット親を基準にして配置されます。<body>です。 #parentをそのオフセットの親にするには、positionrelativeまたはabsoluteとします。

<div id="parent" style="position: relative; width: 300px; height: 300px;"> 
    <div id="child" style="position: relative; left: 0; top: 0;...;"></div> 
</div> 
2

.position()メソッドを使用すると、オフセットの親に対する要素の現在の位置を取得できます。これを.offset()と比較すると、ドキュメントに対する現在の位置を取得します。 .offset()を使用してください。