Проблема заключается просто в том, что когда элемент DOM node
не имеет родителя смещения, node.offsetParent
равен null
, а не undefined
. И typeof null
это 'object'
, а не 'undefined'
.
Почему бы не использовать тот же подход, что и в исходном цикле JS, который просто проверял node.offsetParent
на ложность? Тогда ваш код может выглядеть примерно так:
x = 0
if node.offsetParent
loop
x += node.offsetLeft
break unless (node = node.offsetParent)
x
Я также хотел бы отметить, что хотя у CoffeeScript нет синтаксиса do..while
, в этом случае вы можете просто использовать цикл while
, что делает ваш if
лишним:
x = 0
while node.offsetParent
x += node.offsetLeft
node = node.offsetParent
x