Некоторые документы я не могу получить высоту документа (чтобы разместить что-то абсолютно в самом низу). Кроме того, нижний отступ, по-видимому, ничего не делает на этих страницах, но делает на тех страницах, где будет возвращаться высота. Случай (ы) в точку:
http://fandango.com
http://paperbackswap.com
На Fandango
JQuery $(document).height();
возвращает правильное значение
document.height
возвращает 0
document.body.scrollHeight
возвращает 0
При замене в мягкой обложке:
jEQuery's $(document).height();
TypeError: $(document)
is null
document.height
возвращает неверное значение
document.body.scrollHeight
возвращает неверное значение
Примечание: у меня есть разрешения на уровне браузера, если есть какая-то хитрость там.
javascript
Nic
источник
источник
Ответы:
Размеры документов - это кошмар совместимости браузера, потому что, хотя все браузеры предоставляют свойства clientHeight и scrollHeight, они не все согласны с тем, как рассчитываются значения.
Раньше была сложная формула наилучшей практики для того, как вы тестировали правильную высоту / ширину. Это включало использование свойств document.documentElement, если они доступны, или использование свойств документа и т. Д.
Самый простой способ получить правильную высоту - это получить все значения высоты, найденные в документе или documentElement, и использовать самое высокое значение. Это в основном то, что делает jQuery:
Быстрый тест с букмарклетом Firebug + jQuery возвращает правильную высоту для обеих цитируемых страниц, как и пример кода.
Обратите внимание, что проверка высоты документа до того, как документ будет готов, всегда приводит к 0. Кроме того, если вы загружаете больше материала или пользователь изменяет размер окна, вам может потребоваться повторное тестирование. Используйте
onload
или готовый документ, если вам это нужно во время загрузки, в противном случае просто тестируйте каждый раз, когда вам нужен номер.источник
Это действительно старый вопрос, и поэтому у него много устаревших ответов. С 2020 года все основные браузеры придерживаются стандарта .
Ответ на 2020 год:
Изменить: выше не учитывает поля на
<body>
теге. Если у вашего тела есть поля, используйте:источник
document.documentElement.getBoundingClientRect()
работает лучше.<h1>
в начале элемента есть элемент<body>
с его полем по умолчанию, он будет толкать<body>
элемент вниз без способа его обнаружения.document.documentElement.scrollHeight
(неdocument.body,scrollHeight
) является наиболее точным способом ведения дел. Это работает как с полями тела, так и с полями вещей внутри тела, толкая его вниз.Вы даже можете использовать это:
или более jQuery (так как вы сказали, что jQuery не врет) :)
источник
Полный расчет высоты документа:
Чтобы быть более общим и найти высоту любого документа, вы можете просто найти самый высокий узел DOM на текущей странице с помощью простой рекурсии:
Вы можете протестировать его на своих образцах сайтов ( http://fandango.com/ или http://paperbackswap.com/ ), вставив этот скрипт в консоль DevTools.
ПРИМЕЧАНИЕ: он работает с
Iframes
.Наслаждайтесь!
источник
«Метод jQuery», позволяющий определить размер документа - запросить все, получить наибольшее значение и надеяться на лучшее - работает в большинстве случаев, но не во всех .
Если вам действительно нужны пуленепробиваемые результаты для размера документа, я бы посоветовал вам использовать мой плагин jQuery.documentSize . В отличие от других методов, он на самом деле тестирует и оценивает поведение браузера при загрузке и на основании результата запрашивает правильное свойство оттуда.
Влияние этого одноразового теста на производительность минимально , и плагин возвращает правильные результаты даже в самых странных сценариях - не потому, что я так говорю, а потому, что массивный, автоматически сгенерированный набор тестов фактически проверяет, что это так.
Поскольку плагин написан на ванильном Javascript, вы можете использовать его и без jQuery .
источник
Я соврал, jQuery возвращает правильное значение для обеих страниц $ (document) .height (); ... почему я в этом сомневался?
источник
Правильный ответ на 2017 год:
document.documentElement.getBoundingClientRect().height
В отличие от
document.body.scrollHeight
этого метода учитываются поля тела. Это также дает дробное значение высоты, которое может быть полезно в некоторых случаяхисточник
document.body.scrollHeight
отображает всю высоту с возможностью прокрутки, как и было в первоначальном вопросе.html { height: 100% }
в css. Таким образом, API правильно возвращает реальную вычисленную высоту. Попробуйте удалить этот стиль, а также добавить поля,body
и вы увидите, в чем проблема с использованиемdocument.body.scrollHeight
.<h1>
в начале элемента есть элемент<body>
с его полем по умолчанию, он будет толкать<body>
элемент вниз без способа его обнаружения.document.documentElement.scrollHeight
(неdocument.body,scrollHeight
) является наиболее точным способом ведения дел.documentElement.scrollHeight
дает неправильное значение в этом случае.documentElement.getBoundingClientRect().height
дает правильный. проверить это: jsfiddle.net/fLpqjsxdgetBoundingClientRect().height
. Это отвлекается, в то время как 3 (три) других метода не отвлекаются. Включая ту, которую вы упоминаете как низшую. И вы настаиваете на этом, предлагая удалить 100% высоты html этой страницы и добавив к ней поля. В чем смысл ? Просто примите этоgetBoundingClientRect().height
также не пуленепробиваемый.Чтобы получить ширину в кросс-браузере / устройстве, используйте:
источник
Для тех, у кого возникают проблемы с прокруткой страницы по требованию с использованием функции обнаружения, я предложил этот способ, чтобы определить, какую функцию использовать в анимированной прокрутке.
Вопрос был обоим
document.body.scrollTop
иdocument.documentElement
всегда возвращалсяtrue
во всех браузерах.Однако вы можете только прокрутить документ одним или другим.
d.body.scrollTop
для Safari иdocument.documentElement
для всех остальных в соответствии с w3schools (см. примеры)element.scrollTop
работает во всех браузерах, не так для уровня документа.источник
используйте код удара для вычисления высоты + прокрутки
источник
Этот кросс-браузерный код ниже оценивает все возможные высоты элементов body и html и возвращает найденный максимум:
Рабочий пример:
источник
Я не знаю об определении высоты сейчас, но вы можете использовать это, чтобы положить что-то на дно:
источник
Добавьте ссылки правильно
В моем случае я использовал страницу ASCX, и страница aspx, содержащая элемент управления ascx, не использует ссылки должным образом. Я просто вставил следующий код, и он работал:
источник