2010-11-02 40 views
1

我以前在使用jQuery的$(document).ready()时,在Pro网站管理员中询问了有关HTML的putting Javascript at the bottom的问题。答案是JS必须等待整个DOM加载,所以JS代码在哪里都没有区别。为什么我会在页面底部使用JS的“un-jqueried”内容?

但是,实际上似乎并非如此。我使用的是表格排序插件,当用底部的jQuery加载页面时,我首先看到未排序的表格。然后,JS开始,对表格进行排序并向标题添加箭头(也会更改表格宽度)。它类似于过去常常发生在CSS中的“FOUC”(Unstyled Content的Flash)。

使用页面顶部的jQuery,页面加载排序的表,并且没有跳跃。

为什么会发生这种情况?无论如何,唯一的解决方案是将JS保持在顶端。

+1

你包装你的代码在'$(文件).ready'当你把它在底部,因为你不需要? – 2010-11-02 11:01:13

回答

1

发生这种情况的原因是,一旦所有元素都放置在DOM中,文档就处于“就绪”状态,但不一定在所有元素都完全加载之后。当库存在<head>标签中时,它在被插入到DOM之前被加载,但是如果它在<body>标签中,它在文档准备就绪时仍在加载。

因此,即使文档已经准备好,它仍然需要完全加载库并执行所需的代码,这似乎比在head标签中花费的时间要长。事实上:它发生在任何一个方面,但这种方式更明显。

为防止出现这种差异:样式javascript的免费版本页面与javascript版本相同(或尽可能接近)。

view ready() reference

+0

谢谢,我设法解决表格调整大小问题,方法是将类添加到头部,然后通过Javascript添加。 – DisgruntledGoat 2010-12-31 12:31:01

0

另一个选项是保持表格隐藏,然后使其显示为$(document).Ready()中的最后一条语句。

JavaScript通常保留在页面底部,以便在JS处理开始之前让页面显示基本样式和内容。

如果表格的内容需要在JS运行之前正确显示,唯一真正的选择是使用适当的排序+样式为其提供服务,而不是依赖JS为您完成。无论如何,我会建议你这样做。

相关问题