Почему OffsetParent возвращает body, а не table?

Свойство offsetParent содержит первый родительский элемент у которого CSS свойство position не равно static, либо body если его нет. То есть родителя относительно которого происходит позиционирование элемента. 

Ну и собсна 

The HTMLElement.offsetParent read-only property returns a reference to the element which is the closest (nearest in the containment hierarchy) positioned ancestor element. If there is no positioned ancestor element, the nearest ancestor td, th, table will be returned, or the body if there are no ancestor table elements either.

https://developer.mozilla.org/en-US/docs/Web/API/H...

Пример:
snippet
А что Вы хотите получить, ближайший table? Тогда element.closest('table');