2014-10-07 116 views
0

我的問題是,我有2 <div> s,包含相同的元素。這些元素放置在彼此之下。在將元素'topleft屬性設置爲由.offset()提供的值,然後在此之後將position設置爲absolute後,元素的偏移值都返回爲0.爲什麼?獲取元素偏移返回相同的值之前設置位置:絕對

$(function(){ 
 
    $('[data-distance]').each(function(i,el){ 
 
     var $this = $(el), 
 
      offset = $this.offset(); 
 
     $this.css(offset); 
 
     $this.css('position','absolute'); 
 
    }); 
 
});
body { 
 
    margin: 0; 
 
    height: 1000px; 
 
    font-family: arial; 
 
} 
 
h1 { 
 
    margin: 0 0 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div data-distance="1"> 
 
    <h1>Text</h1> 
 
    <p>Assssssdddddddasdasdasdasdasdasdasdsda</p> 
 
</div> 
 
<div data-distance="0.5"> 
 
    <h1>Text</h1> 
 
    <p>Assssssdddddddasdasdasdasdasdasdasdsda</p> 
 
</div>

回答

3

這是0因爲當循環的第一次迭代中發生的這臺第一$('[data-distance]')絕對的位置,所以當第二次迭代發生,第一個元素是在top: 0位置, left: 0。因此,找到所有匹配元素的偏移量後應添加屬性position: absolute

它應該是這樣的http://jsfiddle.net/vp7jt2xj/

$('[data-distance]').each(function (i, el) { 
    var $this = $(el), 
     offset = $this.offset();  
    $this.css(offset);  
}); 

$('[data-distance]').css('position', 'absolute'); 
+0

哦,我現在明白了。感謝您的澄清。第一個元素絕對定位,然後第二個元素跳起來。 – SeinopSys 2014-10-07 09:23:10

+0

是的,抱歉,我寫的很匆忙,現在我已經解決了這個問題:) – 2014-10-07 09:23:58

相關問題