为什么我会在页面底部使用JS获取“未被jqueried”的内容?

时间:2010-11-02 10:57:55

标签: javascript jquery html optimization

我之前在使用jQuery的$(document).ready()时,向Pro网站管理员询问了关于HTML putting Javascript at the bottom的问题。答案是JS必须等待整个DOM加载,所以JS代码的位置没有区别。

然而,在实践中似乎并非如此。我正在使用表格排序插件,当在底部加载带有jQuery的页面时,我首先看到未排序的表格。然后JS启动,对表进行排序并向标题添加箭头(这也改变了表格宽度)。它类似于“FOUC”(Flash of Unstyled Content),曾经在CSS中发生过很多次。

在页面顶部使用jQuery,页面加载表格排序,没有跳转。

为什么会这样?无论如何,唯一能让JS保持在最高位置的解决方案是什么?

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为一旦所有元素都放在DOM中,文档就会“准备就绪”,但一旦完全加载完毕,就不一定了。当库位于<head>标记中时,它会在插入DOM之前加载,但如果它位于<body>标记中,则在文档准备好时它仍在加载。

因此,即使文档准备就绪,它仍然必须完全加载库并执行所需的代码,这似乎比head标记中的代码要长。事实上:它发生在任何一种方式,但这种方式更明显。

为防止出现差异:将javascript版本的页面设置为与javascript版本相同(或尽可能接近相同)。

view ready() reference

答案 1 :(得分:0)

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

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

如果在JS运行之前需要正确显示表的内容,唯一真正的选择是使用适当的排序+样式来提供它,而不是依靠JS为你做这件事。无论如何我建议这样做。