JS 进阶(5) DOM操作:dom加载完毕执行js、创建节点、遍历节点、查找节点、删除节点

一、dom加载完毕执行js

dom可以看成一个树形结构,dom的加载顺序就是从上到下,我们一再强调将js文件放在尾部,就是因为如果js脚本在dom文档构造之前执行,这样js就无法访问dom文档对象模型。

1.1 jquery

  • 等待页面dom树加载完毕,再执行代码
写法一:标准写法
$(document).ready(function(){
   
	...
});

写法二:简写
$(function(){
   
	....
})
两种写法是等价的
  • 等待页面所有资源(包括css样式表、dom树、图片、第三方框架)加载完毕,再执行代码
$(window).load(function(){
   
	...
});

总结:也就是说$(function(){...})会比$(window).load(function(){...})先执行


1.2 js

  • onload事件:等待页面所有资源(包括dom树、图片、第三方框架)加载完毕,再执行代码
window.onload = function(){
   
	...
}

  • DOMContentLoaded 事件:等待页面dom树加载完毕,再执行代码
    jquery中使用的$(document).ready(function(){});实际上监听的就是 DOMContentLoaded 事件。
function domReady(fn){
   
    //对于现代浏览器,对DOMContentLoaded事件的处理采用标准的事件绑定方式
    if ( document.addEventListener ) {
   
        document.addEventListener("DOMContentLoaded", fn, false);
    } else {
   
        IEContentLoaded(fn);
    }
    //IE模拟DOMContentLoaded
    function IEContentLoaded (fn) {
   
        var d = window.document;
        var done = false;
        //只执行一次用户的回调函数init()
        var init = function () {
   
            if (!done) {
   
                done = true;
                fn();
            }
        };

        (function () {
   
            try {
   
                // DOM树未创建完之前调用doScroll会抛出错误
                d.documentElement.doScroll('left');
            } catch (e) {
   
                //延迟再试一次~
                setTimeout(arguments.callee, 50);
                return;
            }
            // 没有错误就表示DOM树创建完毕,然后立马执行用户回调
            init();
        })();

        //监听document的加载状态
        d.onreadystatechange = function() {
   
            // 如果用户是在domReady之后绑定的函数,就立马执行
            if (d.readyState == 'complete') {
   
                d.onreadystatechange = null;
                init();
            }
        }
    }
}

二、创建节点

  • 普通创建节点

    1. 创建新的元素节点:document.createElement(‘元素名’)
    2. 创建新的文本节点:document.createTextNode(‘文本内容’)
    3. 创建新的片段节点:document.createDocumentFragment()
    4. 创建新的注释节点:document.createComment(‘注释’)
  • 高效创建节点

    1. innerHTML
    2. outerHTML
    3. innerText
    4. outerText
方法名 说明
document.createElement(‘元素名’) 创建新的元素节点
document.createTextNode(‘文本内容’) 创建新的文本节点
document.createComment(‘注释’) 创建新的注释节点
document.createDocumentFragment() 创建新的片段节点
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    .li{
    list-style:none;height:50px;line-height:50px;width:100px;background-color:lightblue;text-align:center;}
  </style>
</head>
<body>
    <script>
    (function(){
    
    	var ulEle = document.createElement('ul');
    	for(var i=0; i<3 ; i++){
    
			var liEle = document.createElement('li');
    		liEle.className = 'li';    		
    		liEle.innerHTML = '第'+i+'个li';
    		ulEle.appendChild(liEle);
    	}
    	document.body.appendChild(ulEle);
    })();
    </script>
</body>
</html>
  • 高效创建节点
    当要创建的大批量的节点,使用createElement这类的方法创建节点就非常麻烦。
方法 说明
innerHTML 用来设置或获取当前标签的起始和结束里面的内容,在读模式下返回与调用元素的所有节点包括元素节点、注释节点、和文本节点对应的HTML标记;而在写模式下innerHTML会根据指定的值创建新的DOM树,然后用这个DOM树安全替换调用元素原先的所有子节点。
outerHTML 返回调用它的元素及所有子节点的HTML标签

在写模式下会根据指定的HTML字符串创建新的outer指数,然后用outer指数完全替换调用的元素


2.1 document.createElement

该方法创建的 HTML5标签 是可以兼容IE8以下的浏览器,并在页面中正常显示该标签所设置的样式;参数可以是大小也可以是小写,但是多数情况下建议使用小写。

	var ulEle = document.createElement('ul');
    var liEle = document.createElement('li');	

解决HTML5新元素不被IE6-8识别

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <style>
      /*html5*/
      article {
    
        font-size: 40px;
        color: red;
      }
    </style>
    <script> 
      (function() {
    
        if (! 
        /*@cc_on!@*/
        0) return;
        var e = "abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(', ');
        var i = e.length;
        while (i--){
    
          document.createElement(e[i]);
        }
      })();
    </script>
  </head>
  <body>
    <article>
      You are my sunshine.
    </article>
  </body>
</html>

2.5 innerHTML

用来设置或获取当前元素里面的所有子节点。

innerHTML有两种模式

<
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值