Координаты ячейки таблицы в окне браузера

Avenus

Under Glory Yield
Координаты ячейки таблицы в окне браузера

Привет, всем! :)

Есть DIV с фиксированной высотой и overflow:auto.
В нем таблица, общая высота ячеек в которой может быть больше высоты DIV.
Для этого и выставлен overflow, чтобы появлялась полоса прокрутки.

Таблица с несколькими столбцами.
Определяю координаты ячейки при клике на нее:
PHP:
// Функция определения координат
function getPosition(node){
 currentNode=$(node);
 var iLeft=0;
 var iTop=0;
 while(!currentNode.is('div[id="table"]')){ // внутри этого DIV таблица с ячейками
  var o=currentNode.offset;
  iLeft+=o.left;
  iTop+=o.top;
  currentNode=currentNode.parent();
 }
 return new Array(iLeft,iTop);
}

// определение координат
var coord=getPosition(cell); // cell - ячейка таблицы, объект
alert(
 'left'+coord[0];
 'top'+coord[1];
);
Координаты определяются верно до начала прокрутки.
Для всех ячеек, которые за пределами видимости при прокрутке - уже неверные.
Чем дальше прокручиваю, тем параметр top больше, чем нужно.
У BODY прокрутки нет.

Понимаю, что нужно еще дополнительно определять высоту прокрутки, только где это сделать, не понимаю.

Подскажите, пожалуйста.
 

Mols

Новичок
По идее у дива надо смотреть "scrollTop". Не пробовал?
 

Avenus

Under Glory Yield
Mols, да пробовал:
PHP:
...
  currentNode=currentNode.parent(); 
 }
 iTop-=$('#table').scrollTop(); // добавил строку
 return new Array(iLeft,iTop); 
}
Все равно неверная координата, больше чем положено.

-~{}~ 31.01.10 13:12:

Вот, структура:
PHP:
<div id='table' style='overflow:auto;height:500px;'>
 <table style='table-layout:fixed;'>
  <tbody>
   <tr><td>1</td></tr>
   <tr><td>2</td></tr>
   ...
   <tr><td>100</td></tr>
  </tbody>
 </table>
</div>
 

Mols

Новичок
Погоди... че-то я не внимательно начальный код глянул.
У тебя там вообще странный цикл. И похоже jQuery.
Цикл по идее не нужен. Пробуй просто offset. Я точно не знаю учитывает ли jQuery scrollTop но то, что офсет у жквери
---------------------
Get the current coordinates of the first element in the set of matched elements, relative to the document.
---------------------
Это конечно надо было прочитать. Вот меня немного смущает "current"... может от и скроллТопы учитывает. В общем убери цикл и скорее всего вообще эту функцию просто можно заменить $(selector).offset(); Ну а если скроллТопы не учитывает - придётся их учесть.
 

Avenus

Under Glory Yield
Mols, да, спасибо... попробовал вообще цикл убрать :)
Теперь работает.
Видимо jQuery сам определяет есть ли скроллинг для offset.
 
Сверху