2014-10-07 117 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

相关问题