2012-01-09 2 views
0

У меня есть код, как это:.position() не указывает на контейнер

<div id="item-menu"> 
    <ul style="padding-top: 10px; padding-left: 20px;"> 
    <li id="item-1">1</li> 
    <li id="item-2">2</li> 
    <li id="item-3">3</li> 
    </ul> 
</div> 

Я хочу, чтобы каждый элемент положения относительно контейнера. В этом примере я получу каждое положение <li> относительно <ul>, правильно?

Что мне делать, чтобы получить позицию item-1 -> top: 10, left: 20?

ответ

-1

Вы должны добавить позицию стиля: относительно для вашего

<ul style="position:relative; padding-top: 10px; padding-left: 20px;"> 

затем

$('#item-menu ul li').each(function(){ 
    console.info($(this).position()); 
}); 
+0

спасибо! это работает –

+0

'позиция: относительный' не * необходимо *. Он также может быть «абсолютным» ... – xandercoded

+0

Какова цель вызова '.first()'? – kubetz

2

Не может быть проще. Просто вызовите метод position() на li с:

var position = $("#item-?").position(); 

Возвращает объект со свойствами top и left. Вам также необходимо установить ul в position: relative в свой CSS.

#item-menu { position: relative; } 

скрипку: http://jsfiddle.net/ByZRV/2/

+0

да я и сделал. но в моей, я всегда получаю позицию относительно документа. говоря, что моя 'ul' выше составляет 100px-зазор из верхней части документа. Я всегда получаю позицию item-1 -> top: 110, left: 20; intead of -> top: 10, left: 20 Вы, почему такой вид происходит? –

+0

@DavidRozando Это зависит от определений 'CSS', которые вы применили к вашему документу. Чтобы получить позицию относительно 'ul', дайте' ul' явное определение 'position'; позволяя дочерние 'li' позиционироваться относительно' ul' – xandercoded

+0

@DavidRozando http://jsfiddle.net/ByZRV/1/ – xandercoded

1

Вы можете использовать .position() вычислить местоположение элемента:

var offset = $('#item-1').position(); 

alert(offset.left + ', ' + offset.top); // 20, 10 

Here's a demo.

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