我有一些带有"area“类的div,它们是相邻浮动的。我有以下jQuery代码:
$(".area").each(function(){
var pos = $(this).position();
$(this).css({"left":pos.left, "top":pos.top});
});
这可以很好地工作,但遗憾的是,当元素静态定位时,浏览器不会考虑top和left。如果我修改元素的position值,pos.left和pos.top都为零。也就是说,如果我有这样的代码:
$(".area").each(function(){
var pos = $(this).position();
$(this).css({"left":pos.left, "top":pos.top, "position":"absolute"});
});
然后,$(this).position()
始终返回{left:0,top:0}
。我是误解了$.position()
的工作原理,还是误解了CSS position的工作原理,还是这是个bug?有没有人对如何解决这个问题有什么建议?
发布于 2013-05-11 16:15:36
跟进我的评论。我创建了一个jsFiddle示例来解释发生了什么。
当您定位第一个.area
时,它会将其从流中移除,现在您的第二个.area
将占据它的位置。这在$.each()
中的每个迭代中都会继续。所以如果你的第一个元素从位置0,0开始,那么当它移动到绝对位置时,下一个元素就变成了0,0。理想情况下,您需要先保存一个包含位置的数组,然后重新定位它们:
$(".area").each(function () {
var pos = $(this).position();
savedPos.push({
left: pos.left,
top: pos.top
});
});
$(".area").each(function (i) {
$(this).css({
"position": 'absolute',
"left": savedPos[i].left,
"top": savedPos[i].top
});
});
或在设置左/右后设置位置:
$(".area").each(function () {
var pos = $(this).position();
$(this).css({
"left":pos.left,
"top": pos.top
});
});
$('.area').css('position','absolute');
https://stackoverflow.com/questions/16498639
复制相似问题