2013-05-11 2 views
1

클래스 "영역"이있는 일부 div가 서로 옆에 떠있었습니다. 나는 다음과 같은 jQuery 코드가 있습니다jQuery position()은 요소 위치 지정이 절대로 설정된 경우 0을 반환합니다.

$(".area").each(function(){ 
    var pos = $(this).position(); 
    $(this).css({"left":pos.left, "top":pos.top}); 
}); 

이 잘 작동하지만 요소가 정적으로 위치 할 때 아아, 상단과 왼쪽 브라우저에 의해 고려되지 않습니다. 요소의 위치 값을 수정하면 pos.left와 pos.top이 모두 0입니다.

$(".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 위치가 어떻게 작동하는지 오해합니까? 아니면이 버그입니까? 누구든지이 문제를 해결하는 방법에 대한 제안이 있습니까?

+0

을 상쇄 봤어? 부모님을 친척으로 지명하셨습니까? –

+0

jsFiddle을 보는 것이 도움이 될 수 있지만 이론은 다음과 같을 수 있습니다. 첫 번째 요소는 맨 위 : 0, 왼쪽 : 0이고 두 번째 요소는 (가설) 맨 위 : 0, 왼쪽 : 20입니다. 첫 번째 반복에서 요소 1을 절대로 설정하고 흐름에서 요소 1을 제거하고 요소 2가 0,0으로 재배치되도록합니다. 따라서 각 요소가 하나씩 흐름에서 벗어나서 다음 요소를 초기 시작 위치로 이동하기 때문에 항상 0,0을 얻습니다. – Syon

+0

상위 위치는 상대적으로 설정됩니다 (예). position()은 내 필요를위한 함수이기 때문에 나는 offset을 시도하지 않았다. 실제로, position : absolute가 요소에 설정되어 있지 않으면 작동합니다. 요소를 반복하면서 위치()는 절대 위치에 배치되기 전에 0 값을 반환합니다. position이 absolute로 설정되지 않으면 모두 정상입니다. 콜백 내부의 어떤 지점에서 현재 처리 된 요소의 CSS 위치를 설정하면 첫 번째 명령문인데도 위치 값은 (0,0)이됩니다./ –

답변

1

내 의견을 후속 조치. 나는 무슨 일이 일어나고 있는지를 설명하는 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');