2012-05-12 4 views
5

Один div i задает высоту в css, используя top:-26px;. У меня есть другие divs другие места, где я хотел бы выровняться с этим div. Я замечаю, что в jquery writing .css('top') получает меня мой css, а не координату y div. Как получить абсолютную позицию x, y с помощью javascript?Получить позицию div (вверху) в javascript?

+0

plz напишите свой первый div css, чтобы помочь другим в ответе. –

ответ

11

Вы можете использовать jQuery(element).offset().top

Надеются, что это помогает.

+2

Ничего не упомянуто о JQuery, и ваш код должен быть переписан с помощью 'jQuery (element) .offset(). Top'. – VisioN

+2

@VisioN: О чем ты говоришь, я упоминал jquery. Ну, вроде (.css функция не прямая js) +0. Это не работает и его '.offset(). Top' (мне пришлось смотреть оба) –

+0

top получает меня -18 :(Мне нужно абсолютное положение, и эта позиция относительна. –

0

Со стандартным JavaScript:

var elem=document.getElementById("elemID"); 
var top=elem.offsetTop; 
var left=elem.offsetLeft; 

С JQuery:

var top=$("#elemID").offset().top; 
var left=$("#elemID").offset().left; 
+2

offsetTop возвращает расстояние от текущего элемента относительно вершины смещенного узла Parent, а не страницы. – rlemon

+0

@rlemon правильно, поэтому моя проблема –

3

Попробуйте этот код:

function getElementPosition(id) { 
    var offsetTrail = document.getElementById(id); 
    var offsetLeft = 0; 
    var offsetTop = 0; 
    while (offsetTrail) { 
     offsetLeft += offsetTrail.offsetLeft; 
     offsetTop += offsetTrail.offsetTop; 
     offsetTrail = offsetTrail.offsetParent; 
    } 

    return { 
     left: offsetLeft, 
     top: offsetTop 
    }; 
}​ 

Он возвращает объект с left и top переменных.

Если вы используете JQuery попробовать offset() метод:

var pos = $("#element").offset(); 
console.log(pos.left) 
console.log(pos.top) 
+0

та же проблема с другими. –

+1

@ acidzombie24 Вы уверены, что вы не смешиваете абсолютные и относительные положения? Эти функции возвращают положение элемента относительно страницы. – VisioN

+0

@ VisioN Я уже заметил, что offsetTop по отношению к нему ... подождите, и, возможно, некоторые CSS или HTML прольют некоторый свет на ситуацию. – rlemon

17

Я дам вам решение ванили .. не жалуется .. добавить [0] к вашему элементу, и это исправлено! : P надеюсь, что это поможет.

function getOffset(el) { 
    var _x = 0; 
    var _y = 0; 
    while(el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { 
     _x += el.offsetLeft - el.scrollLeft; 
     _y += el.offsetTop - el.scrollTop; 
     el = el.offsetParent; 
    } 
    return { top: _y, left: _x }; 
} 
var x = getOffset(document.getElementById('yourElId')).left; 
+0

top получает меня -18 :(. Мне нужна абсолютная позиция, и эта позиция относительна. –

+1

работает для меня. http://jsfiddle.net/rlemon/m7A6T/ – rlemon

+0

Возможно, вы можете попробовать показать нам свой HTML и CSS .... может быть немного более полезным тогда. – rlemon

0

Использование JQuery (элемент) .offset()

Надеется, что это помогает.

Например

var elementPosition = jQuery(element).offset(); 
var elementTopPositon = elementPosition.top; 
3

Кросс-браузер безопасного вниз IE 8, возможно, даже 7 или 6:

function offset(el) { 
    var rect = el.getBoundingClientRect(), 
    scrollLeft = window.pageXOffset || document.documentElement.scrollLeft, 
    scrollTop = window.pageYOffset || document.documentElement.scrollTop; 
    return { top: rect.top + scrollTop, left: rect.left + scrollLeft } 
} 
var offsetEl = offset(document.getElementById('some_id')); 
console.log(offsetEl.left, offsetEl.top); 

Короткие и быстро, и нет необходимости JQuery.

+0

Саймон, где функция getBoundingClientRect? вы копируете другой сайт? wtf lol – KingRider

+0

Не знаю, какова ваша проблема и не заботится. Вот ссылка для этого метода: https://developer.mozilla.org/en/docs/Web/API/Element/getBoundingClientRect –

+0

hum .. Mozilla? его не знаю, ур сообщение об IE8 ... слишком запутался .... тест в http://jsfiddle.net/Darker/sj6tnfce/2/ – KingRider

Смежные вопросы