jQuery.ready()函数和异步CSS

时间:2015-07-24 04:03:13

标签: jquery asynchronous

我想异步加载我的网站CSS。我想知道在完成CSS的异步加载后是否会运行jQuery.ready()函数,或者jQuery会忽略它,并且在jQuery.ready()函数开始运行后CSS可能会完成加载。

3 个答案:

答案 0 :(得分:1)

尝试使用$.holdReady()

// set `$.holdReady()` to `true`
$.holdReady(true);
// do stuff at `$.holdReady(true)`
// e.g., call hide `body` element
$("body").hide();
// load asynchronous `css`
$("<style>")
.appendTo("head")
.load("https://gist.githubusercontent.com/anonymous/ec1ebbf8024850b7d400/"
      + "raw/906431c0472286e141b91aac1676369bbb8d2f97/style.css"
      , function(e) {
  // set `$.holdReady()` to `false`
  $.holdReady(false);
});
// do stuff at `$.holdReady(false)`
$(document).ready(function() {
  $("body").show();
  alert("ready");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<body>
  <div>
    abc
  </div>
    <div>
    123
  </div>
</body>

答案 1 :(得分:0)

简短回答 - 不。 $(document).ready()不会等待异步加载完成。它会在加载DOM后立即触发。

通常你会将async加载函数放在(document).ready()中,这样他们就可以在安全的情况下尽快开始执行。您在DOM之前尝试执行异步CSS加载有点奇怪。 $(document).ready()是一个事件触发函数。不能让它等待。

请详细说明您要完成的目标。

P.S。请阅读此&#34;执行顺序&#34;回答: Load and execution sequence of a web page?

答案 2 :(得分:-1)

jQuery.ready()在加载DOM时运行。

如果你想异步加载一些CSS,那么最好的办法就是在准备好的回调中在头部插入 link 标签。

换句话说......

<script language="javascript">
   $(document).ready(function()
    {
         $("head").append("<link rel=stylesheet href='yourfile.css' type='text/css'/>");
    }
   )
</script>

希望它有所帮助!