Кросс-браузерная проблема с функцией offset () jquery - PullRequest
7 голосов
/ 02 декабря 2010

У меня кросс-браузерная проблема с функцией offset() в jQuery. Например, я ищу смещение тега привязки

например. $('#anchorid').offset().top

  • В Firefox 3.6 = 205
  • В IE8 = 204
  • В IE7 = 553

Как вы можете видеть разницу в каждом возвращаемом значении. Я не слишком обеспокоен разницей между FF и IE8, но я с IE7 и другими.

Есть ли еще одна функция, которую я мог бы использовать, которая была бы такой же или похожей кросс-браузерной или возможное исправление для этого?

Ответы [ 2 ]

10 голосов
/ 02 декабря 2010

Скорее всего, с вашей разметкой что-то не так (не кроссбраузерно).Но в качестве альтернативы вы можете попробовать использовать собственный javascript вместо этого.

document.getElementById('anchorid').offsetTop

Если вы хотите получить смещение на всей странице, вы можете использовать такую ​​функцию:

function findTotalOffset(obj) {
  var ol = ot = 0;
  if (obj.offsetParent) {
    do {
      ol += obj.offsetLeft;
      ot += obj.offsetTop;
    }while (obj = obj.offsetParent);
  }
  return {left : ol, top : ot};
}
0 голосов
/ 31 августа 2013

Эта проблема возникает в IE8, когда мой скрипт загружается на страницу, где элемент, для которого мы хотим получить offset().top, не существует.

Я решил это так:

if ($('#element').length){
    $('#element').offset().top // ...
}

Никогда не выполнять offset().top, если элемент не существует.

...