我的页面有问题,我试图让colorbox(一种jQuery的灯箱)工作。由于FireFox(3.5.3)中document.body
为null
,它显然不起作用。在颜色框工作的Safari(4.0.3)中不是这种情况。
向我跳出的一点是(我正在使用Drupal 6)drupal附加了一个脚本标记,用于在页面的最底部设置一些JavaScript变量,位于结束体和html标记之下。否则我没有看到问题。不幸的是,我很难做到这一点。可能是因为这导致FF与身体有问题吗?
在Firefox中使用colorbox的示例文件确实有效(并在那里定义了document.body
)。
有没有什么方法可以使用jQuery用document.body
中的某些内容重新填充$()
属性,或者我应该继续敲打drupal以不在html标记之外放置脚本标记(更容易说比做完了??
即使在页面加载完成后,也要澄清document.body
是null
。这是一个Firebug控制台捕获:
>>> document.body
null
>>> $().attr('body')
null
答案 0 :(得分:9)
通常原因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')
找到它。
答案 1 :(得分:1)
Body标签下方的Drupal不应该有任何输出。检查您的主题page.tpl.php
文件。结局看起来应该是这样的:
<!-- BEGIN closure: must always be last element in body -->
<?php print $closure; ?>
<!-- END closure -->
</body>
</html>
$ closure变量的输出下面不应该有print语句,因为这需要是最后一个内容输出(但在主体内)。
答案 2 :(得分:1)
你不使用另一个JS框架和jQuery吗? 如果是这样,你是否负责如何加载两个库以使它们保持兼容(订单,兼容性修复......)?
答案 3 :(得分:0)
这很奇怪,但只是在我的$(document).ready(function(){});
底部添加这一行修复了破坏身体的任何内容:
if(null==document.body){document.body = $('body')[0];}
但是我必须更多地考虑它为什么在第一时间被打破,以及为什么它没有在野生动物园中破坏。
答案 4 :(得分:0)
抱歉,这个答案不在jquery中(我在过去几个小时里用原型进行了类似的练习)。
基本上,bobince的最佳答案非常有用,但是可以重新分配文档正文,然后才能找到它。
这是原型,但你明白了,
body = $("content").ancestors().last().children[1];
如果内容是页面上的某些已定义元素,您可以使用常规选择器找到它们,任何可以使用它并不重要,从那里您遍历到顶部然后向下并沿着body元素。
希望有所帮助,就像我说我的问题只是类似的,不知道这对你有什么影响,但我希望它至少会引发某人的想法。