offsetParent отличается

#javascript #css #offset

#javascript #css — файл #смещение #css

Вопрос:

Для Chrome и ff этот скрипт работает идеально, когда дело доходит до ужасного ie. есть одна проблема

 function getY(oElement) {
    var curtop = 0;
    if (oElement.offsetParent) {
      while (oElement.offsetParent) 
      {
        curtop  = oElement.offsetTop;
        oElement = oElement.offsetParent;
      }
    }
    else if (oElement.y) {
      curtop  = oElement.y;
    }
    return curtop;
}
  

Я попробовал некоторую отладку и обнаружил, что родительским для chrome и ff является <Li> , что правильно, но родительским для ie является <body>

пожалуйста, помогите кому-нибудь?

Хорошо, я еще немного покопался и обнаружил, что ie не поддерживает offsetparent с position:relative; , но мне нужен этот css по другой причине, любой обходной путь?

Комментарии:

1. Вот как это делает jQuery: github.com/jquery/jquery/blob/master/src/offset.js#L213 (вы можете выполнить поиск в источнике jQuery для "offsetParent:" , чтобы найти эту часть самостоятельно)

Ответ №1:

Раньше я постоянно использовал сценарий, подобный этому, для определения положения элемента. С тех пор я перешел на использование jQuery, который имеет две потрясающие и очень совместимые с браузером функции для определения положения:

position() —http://api.jquery.com/position / — возвращает положение элемента относительно родительского.

смещение() —http://api.jquery.com/offset / — возвращает положение элемента относительно документа.

Сначала я немного неохотно использовал jQuery, потому что не хотел тратить время на его изучение и потому что я уже написал так много фрагментов кода самостоятельно, которые делали подобные вещи. Когда я попробовал jQuery, я выучил его в течение дня, и мне это нравится, и теперь я использую его для всех своих проектов JavaScript.

Возможно, это не тот ответ, который вы ищете, но в jQuery есть функции определения местоположения.