2010-04-22 5 views
0

Я хочу реализовать бесконечную прокрутку (с загрузчиком на основе AJAX) в теле таблицы HTML.Позиция прокрутки в теле таблицы

Мой HTML выглядит следующим образом:

<table> 
    <thead> 
    <tr><th>Column</th></tr> 
    </thead> 
    <tbody> 
    <tr><td>Row 1</td></tr> 
    <tr><td>Row 2</td></tr> 
    </tbody> 
</table> 

я получаю полосу прокрутки на <tbody> как так:

tbody { 
    height:10em; /* Otherwise the tbody expands to fit all rows */ 
    overflow:auto; 
} 

Чтобы быть в состоянии сделать что-либо, когда пользователь прокручивает на дно, Мне нужно иметь возможность прокрутки позиции <tbody>. Во всех (jQuery) бесконечных реализациях прокрутки, которые я видел (such as this one), они вычитают высоту содержимого из высоты контейнера и сравнивают его с значением .scrollTop().

К сожалению, это может не сработать с <tbody>, являющимся одновременно окном просмотра и контейнером для прокрученного содержимого. $("tbody").height() возвращает размер видимого (т. Е. «Shrunken»), но я не знаю, как я могу получить полный (видимый + скрытый) размер тела таблицы. (FWIW, $("tbody").scrollTop() возвращает «большое» число при прокрутке вниз, точно так же, как я ожидал бы этого).

Есть ли способ сделать это?

+0

* сверчки *. Взгляды продолжают расти, но нет активности. Я предполагаю, что это просто невозможно, учитывая текущие браузеры. –

ответ

1

tbody.scrollHeight работает для меня.

+0

Какой браузер вы используете? –

+0

FF 3.6.8. http://devsandbox.nfshost.com/tbody-scroll-test.html – 2010-09-10 08:46:46

+0

Это превосходно, за исключением того, что это JavaScript (а не jQuery) и, следовательно, подвержен ошибкам (IE) браузера/inconsistencey (см. http: //www.quirksmode .org/дом/w3c_cssom.html # T36). Однако, вероятно, это достаточно хорошо для решения tbody. –

1

Если вам нужна скрытая высота, вы можете установить высоту на авто, захватить ее, а затем вернуть высоту до принудительного размера.

var $tbody = $('tbody'); 
var initTbodyHeight = $tbody.height(); 
$tbody.css('height','auto'); 
var autoTbodyHeight = $tbody.height(); 
$tbody.css('height',initTbodyHeight); 

Даже IE должен обрабатывать это достаточно быстро, без каких-либо мерцаний, видимых для глаз человека.

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