Проблема с получением jQuery offset () для работы с загруженным содержимым ajax - PullRequest
2 голосов
/ 08 марта 2011

В моем коде offset() всегда возвращает 0,0 для элементов, загруженных из ajax или метода load() - есть идеи?

Придуманный пример кода:

jQuery("#div1").load(url, function() {
   var offset = jQuery("#some-div-in-new-content").offset();
   // offset is always 0,0
});

Я подтвердил, что jQuery("#some-div-in-new-content") находит объект - другие свойства хороши.

Ответы [ 3 ]

3 голосов
/ 08 марта 2011

В принципе, конечно, offset работает с содержимым, загруженным ajax: https://output.jsbin.com/gixoxojomu. Это было бы очень, очень, очень странно, если этого не произошло, поскольку в принципе невозможно определить, когда новый контент был загружен в DOM, откуда он появился.

Итак, вопрос в том, почему это не работает на вашей странице? Мы не можем ответить на это наверняка из приведенной информации, но вот несколько возможных причин:

  • Возможно, у вас есть другой div с идентификатором some-div-in-new-content, где-то еще на странице, который имеет смещение 0,0.
  • Возможно, контент скрыт. Из документации:

    jQuery не поддерживает получение координат смещения скрытых элементов или учет границ, полей или отступов, заданных для элемента body.

0 голосов
/ 19 апреля 2012

В моем случае родитель Loaded HTML был скрыт, поэтому смещение было равно нулю. Поэтому после загрузки ответа HTML убедитесь, что он или его родитель видимы, а затем вычислите смещение.

0 голосов
/ 15 марта 2011

У меня была похожая проблема, и проверка положения недавно загруженных элементов с помощью offset().top показала, что моя проблема была в том, что я не использовал clear: both; после элемента.Может быть, это кому-нибудь поможет.

...