Вопрос

У меня проблема со страницей, на которой я пытаюсь получить цветная коробка (своего рода лайтбокс для jQuery) работает.Это не работает, по-видимому, из-за document.body быть null в FireFox (3.5.3).Это не тот случай в Safari (4.0.3), где работает colorbox.

Что-то, что бросается мне в глаза, так это то, что (я использую Drupal 6) drupal добавил тег script для установки некоторых переменных JavaScript в самом низу страницы, под закрывающим телом и html-тегами.В остальном я не вижу проблемы.К сожалению, у меня возникают большие проблемы с тем, чтобы заставить его этого не делать.Может быть, именно из-за этого у FF возникают проблемы с телом?

Использование файлов примеров colorbox в Firefox действительно работает (и document.body определяется там).

Есть ли какой-нибудь способ, которым я мог бы использовать jQuery для пополнения document.body свойство с чем-то из $() возможно, или мне следует продолжать работать с drupal, чтобы не помещать тег script вне html-тегов (легче сказать, чем сделать)?

Чтобы прояснить document.body является null даже после завершения загрузки страницы.Вот снимок консоли Firebug:

>>> document.body
null
>>> $().attr('body')
null
Это было полезно?

Решение

Обычная причина document.body значение null связано с тем, что вы выполняете скрипт перед <body> был обнаружен тег (*).Не видя кода, я не могу сказать наверняка, но это была бы обычная причина.Переместите туда, куда вы поместили сценарии.

(*:или другой элемент, такой как <p> то, что, как известно браузеру, не может происходить вне тела, и в этом случае он молча добавляет <body> чтобы исправить вашу недостающую разметку.Разница в синтаксическом анализе некоторых тегов, обычно содержащихся в теле, может объяснить, почему Safari позволяет вам выйти сухим из воды.)

Может быть, именно из-за этого у FF возникают проблемы с телом?

Нет.Это нарушенная разметка, и Drupal не должен этого делать, но закрытие </body> это не прекращается document.body ссылается на соответствующий узел DOM.

Есть ли какой-нибудь способ, которым я мог бы использовать jQuery для пополнения document.body

НЕТ, document.body отражает только в основном то же самое, что и document.getElementsByTagName('body')[0], поэтому пытаться установить его нецелесообразно, и если вы не можете найти тело с document.body, jQuery не сможет найти его с помощью $('body') либо.

Другие советы

Не должно быть никакого вывода из Drupal ниже тега body. Проверьте файл тем page.tpl.php. Конец должен выглядеть примерно так:

<!-- BEGIN closure: must always be last element in body -->
    <?php print $closure; ?>
<!-- END closure -->

</body>
</html>

Под выводом переменной $ closure не должно быть оператора print, поскольку это должен быть последний вывод содержимого (но все же в теле).

Разве вы не используете другой JS-фреймворк вместе с jQuery? Если да, вы позаботились о том, чтобы загрузить обе библиотеки, чтобы они оставались совместимыми (порядок, исправление совместимости ...)?

Ну, это странно, но просто добавив эту строку в конец моего $(document).ready(function(){}); исправленного, что бы не сломало тело:

  if(null==document.body){document.body = $('body')[0];}

Но мне нужно больше взглянуть на то, почему он сломался, а также почему он не сломался в сафари.

извините, этот ответ не в jquery (в последние пару часов я боролся с чем-то похожим с прототипом).

В основном, верхний ответ от bobince весьма полезен, однако вы можете переназначить тело документа, чтобы найти его.

Это прототип, но вы поняли,

body = $("content").ancestors().last().children[1];

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top