工作留档--jquery的$(document).ready(function(){})和原生js里的window.onload区别。

今天开发过程中,遇到了一个以前没有留意的问题。那就是jquery里的$(document).ready(function(){}),以前使用原生js的话,其中的window.onload在一个界面是只能出现一次的,因此我想当然的就把jquery里的$(document).ready(function(){})也只能使用一次(我的同事也是这样理解的),但是在看源码的过程中,有一个界面出现多个ready的情况,那我就很疑惑,有两个ready的话,它们之间的加载顺序是什么样的呢?
有这个疑惑的原因就是,我写的js修改界面下拉框动态加载数据的时候,有时候数据可以显示,有时候数据不能显示。(当然还有另一个原因,下篇博文$.post$.ajax的区别,来介绍)。
废话不多说,下面是我查询资料及实际解决时候的理解。首先原生js的window.onload和jquery的$(document).ready(function(){})区别之一就是前者在界面中只能使用一次,如果有多次,那么后面的会覆盖前面的,也就是只会执行最后一次。而后者在js中可以使用多次,每一个都是单独的事件函数不存在覆盖问题。
区别之二就是执行时间的问题,前者执行时间是必须等到包括图片在内的等所有页面元素完全加载完毕后才会执行,比较慢;而后者是在DOM对象完成后就立刻执行的,不必等到所有元素加载完毕,比较快;
区别之三前者写法只有这一种,而后者可以简写为$(function(){});(这些区别在网上随处可见)。
讲完了区别那么又回到最初的起点,多个ready它们的加载顺序是怎么样的呢?是正常的按顺序加载吗?为了了解这个顺序,咱上代码(该代码转载博友的,原因你晓得):

<html>
<head>
<script src="./jquery-1.9.0.min.js"></script>
<script type="text/javascript">
  $(function(){
    alert('1');
    $(function(){
      alert('2');
      $(function(){
        alert('3');
      });
    });
  });
</script>
<body>
<script type="text/javascript">
  $(document).ready(function() {
    alert('4');
    $(function(){
      alert('5');
    });


  });
</script>
<script type="text/javascript">
  $(function(){
    alert('6');
    $(document).ready(function() {
      alert('7');
    });
  });
</script>
</body>
</html>

上述代码alert顺序为:1462573
总结:多个ready的执行顺序不仅仅只是顺序加载,还有嵌套层级有关系,具体可以自己写代码研究下。实践出真知。

### 回答1: 如果没有jquery,那么可以使用JavaScript原生的`document.querySelector()`或者`document.querySelectorAll()`来代替$(document)。例如,可以使用如下代码来获取文档中的所有段落元素: ``` var paragraphs = document.querySelectorAll('p'); ``` 同样地,可以使用`document.getElementById()`或者`document.getElementsByTagName()`来获取单个元素或者元素集合。例如,可以使用如下代码来获取文档中第一个段落元素: ``` var firstParagraph = document.getElementsByTagName('p')[0]; ``` 注意,上面的代码中使用的是`getElementsByTagName()`,这个方法会返回一个类数组对象,所以需要使用下标访问具体的元素。 此外,还可以使用JavaScript原生的`document.getElementById()`来获取指定的元素。例如,可以使用如下代码来获取文档中ID为"my-element"的元素: ``` var myElement = document.getElementById('my-element'); ``` 总之,如果没有jquery,可以使用JavaScript原生的方法来获取文档中的元素。 ### 回答2: 如果没有jQuery,$(document)可以用纯JavaScript来替代。 在jQuery中,$(document)用于选择整个文档对象,可以执行各种操作和绑定事件。在纯JavaScript中,我们可以使用以下方式来替代$(document)的功能: 1. document对象:document对象是JavaScript中表示整个HTML文档的对象,可以代替$(document)来进行各种操作。例如,可以使用document.getElementById()来选择元素,document.addEventListener()来绑定事件。 2. window.onload事件:如果需要在整个文档加载完成后执行一些操作,可以使用window.onload事件来代替。可以通过window.onload = function() {}来编写需要执行的代码。 3. 事件委托:如果需要给子元素绑定事件,可以将事件委托给父元素来实现。例如,使用document.addEventListener()绑定事件,然后在事件处理函数中判断事件源是否是需要绑定事件的子元素。 总之,虽然没有了jQuery的便利性和简洁性,但是通过纯JavaScript的方式仍然可以实现$(document)的功能。 ### 回答3: 如果没有jQuery,可以使用原生JavaScript来代替$(document)。 在jQuery中,$(document)表示当前HTML文档的根元素。它允许我们通过编写$(document).ready()函数来确保文档在加载完毕后再执行JavaScript代码。 在没有jQuery的情况下,我们可以使用原生JavaScript来实现相同的功能。可以使用document对象来代替$(document)。 例如,原生JavaScript代码可以这样来实现类似的$(document).ready()函数的功能: ``` document.addEventListener("DOMContentLoaded", function(event) { // 在页面加载完毕后执行的代码 // 可以在这原生JavaScript代码 }); ``` 这段代码使用了`addEventListener`方法来监听`DOMContentLoaded`事件,这个事件表示当初始的HTML文档被完全加载和解析完成后触发。在这个事件的处理函数中,可以编写你想要在文档加载完毕后执行的JavaScript代码。 需要注意的是,原生JavaScript代码可能比jQuery复杂一些,因为jQuery提供了更加简便和跨浏览器兼容的封装。但是,在没有jQuery的情况下,我们仍然可以使用原生JavaScript来达到类似的效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值