Как получить верхнюю позицию iframe в IE6, используя JavaScript? - PullRequest
1 голос
/ 09 февраля 2009

Кто-нибудь знает, как получить верхнюю позицию iframe на странице для IE6, используя JavaScript?

Следующий код работает для IE7: window.frames (0) .screenTop

но тот же код в IE6 возвращает неправильное значение (слишком высокое).

Есть идеи?

Ответы [ 2 ]

1 голос
/ 09 февраля 2009

Кто-нибудь знает, как получить верхнюю позицию iframe на странице для IE6, используя JavaScript?

Так же, как и для любого другого элемента, используя offsetTop (и добавляя offsetTop от любых предков offsetParent). Неважно, что это элемент

var el= document.getElementsByTagName('iframe')[0];
var top= 0;
while (el && el.nodeType==1 && el!==document.documentElement) {
    top+= el.offsetTop;
    el= el.offsetParent;
}

Следующий код работает для IE7: window.frames (0) .screenTop

Я сомневаюсь, что это работает. screenTop - это неправильная вещь, это координаты на экране, а не на странице. И в любом случае это должны быть квадратные скобки.

0 голосов
/ 09 февраля 2009

Вы можете использовать offsetTop. Конечно, вам придется зацикливаться, добавляя offsetParent offsetTop, пока offsetParent не станет нулевым.

И jQuery , и Прототип сделает это за вас.

Фактически, вот код из Prototype:

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName.toUpperCase() == 'BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  }
  //Element.getStyle returns the style or its default if not defined.
  //Element._returnOffset returns the left and top as a single object
...