5

我在尝试让colorbox(一种用于 jQuery 的灯箱)工作的页面出现问题。document.body由于在nullFireFox (3.5.3) 中,它显然不起作用。在颜色框起作用的 Safari (4.0.3) 中,情况并非如此。

让我大吃一惊的是(我使用的是 Drupal 6)drupal 附加了一个脚本标签来在页面的最底部设置一些 JavaScript 变量,在结束的 body 和 html 标签下方。否则我看不出有什么问题。不幸的是,我很难让它不这样做。难道是这个导致FF的身体出现问题?

在 Firefox 中使用 colorbox 的示例文件确实有效(并且在document.body那里定义了)。

有什么方法可以使用 jQuery 来重新填充document.body属性$(),或者我应该继续敲击 drupal 以不在 html 标签之外放置脚本标签(说起来容易做起来难)?

为了澄清即使在页面完成加载之后也是如此document.bodynull这是一个 Firebug 控制台捕获:

>>> document.body
null
>>> $().attr('body')
null
4

5 回答 5

9

通常的原因document.body是 null 是因为您在<body>遇到 tag(*) 之前执行脚本。如果没有看到代码,我不能肯定地说,但这是通常的原因。移动放置脚本的位置。

(*: 或其他元素,例如<p>浏览器知道不能出现在正文之外,在这种情况下,它会默默地添加 a<body>来修复您丢失的标记。解析某些通常在正文中的标签的差异可能会解释为什么 Safari 能让你侥幸逃脱。)

难道是这个导致FF的身体出现问题?

不。这是损坏的标记,Drupal 不应该这样做,但关闭</body>并不会停止document.body引用正确的 DOM 节点。

有什么方法可以使用 jQuery 重新填充 document.body

不,document.body只是反映与 基本相同document.getElementsByTagName('body')[0],因此尝试设置它是不明智的,如果找不到带有 的主体document.body,jQuery 也将无法找到它$('body')

于 2009-10-27T14:11:07.277 回答
1

正文标签下方不应有 Drupal 的任何输出。检查您的主题page.tpl.php文件。结尾应该看起来像这样:

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

</body>
</html>

$closure 变量的输出下方不应有打印语句,因为这需要是最后一个内容输出(但仍在正文)。

于 2009-10-27T15:47:12.200 回答
1

你不使用另一个 JS 框架和 jQuery 吗?如果是这样,您是否注意如何加载这两个库以使它们保持兼容(订单,兼容性修复...)?

于 2010-04-02T15:11:14.087 回答
0

$(document).ready(function(){});好吧,这很奇怪,但只需在我固定的底部添加这条线就可以了:

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

但我必须更多地看看它为什么一开始就坏了,以及为什么它没有在 safari 中坏掉。

于 2009-10-27T14:28:52.453 回答
0

抱歉,这个答案不在 jquery 中(在过去的几个小时里,我一直在与原型做类似的事情)。

基本上,来自 bobince 的最佳答案非常有帮助,但是您可以重新分配文档正文以找到它。

这是原型,但你明白了,

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

如果内容是页面上一些已定义的元素,您可以使用通常的选择器找到,任何都可以使用它并不重要,从那里您遍历到顶部,然后向下遍历到 body 元素。

希望有帮助,就像我说我的问题只是相似的,不知道这对你会有什么影响,但我希望它至少会引发某人的想法。

于 2010-09-28T03:34:34.683 回答