DOM的核心总结

关于dom操作,我们主要针对于元素的操作。主要有创建、增、删、改、查、属性操作、事件操作。

1、创建

document.write

innerHTML

createElement

区别:

1. document.write 是直接将内容写入页面的内容流,界面加载完成之后,再写入,这样它会导致页面全部重绘

2. innerHTML 是将内容写入某个 DOM 节点,不会导致页面全部重绘

3. innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂

4. createElement() 创建多个元素效率稍低一点点,但是结构更清晰

5. 总结:不同浏览器下,innerHTML 效率要比 creatElement 高

1.1 createElement方式(效率一般,但结构清晰)

    <script>
        function fn() {
            var d1 = +new Date();
            for (var i = 0; i < 1000; i++) {
                var div = document.createElement('div');
                div.style.width = '100px';
                div.style.height = '2px';
                div.style.border = '1px solid red';
                document.body.appendChild(div);
             }
                var d2 = +new Date();
                console.log(d2 - d1);
        }
        fn();
    </script>

1.2 innerHTML字符串拼接方式(效率低)

    <script>
        function fn() {
            var d1 = +new Date();
            var str = '';
            for (var i = 0; i < 1000; i++) {
                document.body.innerHTML += '<div style="width:100px; height:2px; border:1px solid blue;"></div>';

            }
            var d2 = +new Date();
            console.log(d2 - d1);
        }
        fn();
    </script>

总结:上述操作相当于字符串拼接,而字符串不可变性导致没拼接一次开辟一个变量空间,所以效率低下

1.3 innerHTML数组方式(效率高)

    <script>
        function fn() {
            var d1 = +new Date();
            var array = [];
            for (var i = 0; i < 1000; i++) {
                array.push('<div style="width:100px; height:2px; border:1px solid blue;">            
                </div>');
            }
            document.body.innerHTML = array.join('');
            var d2 = +new Date();
            console.log(d2 - d1);
        }
        fn();
    </script>

2、增加

2.1 末尾添加:element.appendChild(childNode)

       将 childNode 添加到element的子节点列表的末尾 (追加)

2.2 指定位置添加:element.insertBefore(childNode, 指定元素)

              将childNode 添加到element的指定元素的前面

    <ul>
        <li>123</li>
    </ul>
    <script>
        // 1. 创建节点元素节点
        var li = document.createElement('li');
        // 2. 添加节点 node.appendChild(child)  node 父级  child 是子级 后面追加元素
        var ul = document.querySelector('ul');
        ul.appendChild(li);
        // 3. 添加节点 node.insertBefore(child, 指定元素);
        var li2 = document.createElement('li');
        ul.insertBefore(li2, ul.children[0]);
        // 4. 我们想要页面添加一个新的元素 : 1. 创建元素 2. 添加元素
    </script>

3、删

3.1 node.removeChild(child)

        说明:node.removeChild() 方法从 node节点中删除一个子节点,返回删除的节点。

    <button>删除</button>
    <ul>
        <li>熊大</li>
        <li>熊二</li>
        <li>光头强</li>
    </ul>
    <script>
        // 1.获取元素
        var ul = document.querySelector('ul');
        var btn = document.querySelector('button');
        // 2. 删除元素  node.removeChild(child)
        // ul.removeChild(ul.children[0]);
        // 3. 点击按钮依次删除里面的孩子
        btn.onclick = function() {
            if (ul.children.length == 0) {
                this.disabled = true;
            } else {
                //注意:每次点击都是删除第一个
                //第一次删除3个里边的第一个,删除之后原来的1,2变为0,1,所以在次删除还是删除0
                ul.removeChild(ul.children[0]);
            }
        }
    </script>

4、改

主要修改dom的元素属性,dom元素的内容、属性, 表单的值等

4.1 修改元素属性: src、href、title等

4.2. 修改普通元素内容: innerHTML 、innerText

4.3. 修改表单元素: value、type、disabled等

4.4. 修改元素样式: style、className

5、查

主要获取查询dom的元素

5.1 DOM提供的API 方法:  getElementById、getElementsByTagName  古老用法 不太推荐

5.2 H5提供的新方法: querySelector、querySelectorAll   提倡

5.3 利用节点操作获取元素: 父(parentNode)、子(children)、兄(previousElementSibling、nextElementSibling)    提倡

6、属性操作

主要针对于自定义属性:一组元素中(同一个父亲),每个元素他自己不知道自己排行老几,设置自定义属性,来排行。

6.1 设置dom的属性值

6.1.1 设置元素自带属性,通过点语法:element.属性='属性值'

    div.id = 'test';
    div.className = 'navs';

6.1.2 设置自定义属性,通过方法:element.setAttribute('属性','属性值');

    div.setAttribute('index', 2);
    div.setAttribute('class', 'footer');

注:div.setAttribute('class', 'footer'); // class 特殊  这里面写的就是class (也可以设置自带属性,但是麻烦)

6.2 得到dom的属性值

6.2.1 获取元素自带属性,通过点语法:element.属性:

    <div id="demo" index="1" class="nav"></div>
    <script>
        var div = document.querySelector('div');
        // 1. 获取元素的属性值
        // (1) element.属性
        console.log(div.id);
    <script>

6.2.1 获取自定义属性,通过方法:element.getAttribute('属性'):

注:getAttribute也可以获取自带属性,但是没有点语法方便

6.3 移除属性

6.3.1 移除自定义属性语法:element.removeAttribute('属性值')

    // 移除属性 removeAttribute(属性)    
    div.removeAttribute('index');
    div.removeAttribute('id');

注意:可以移除所有属性:自带和自定义

6.3.1 移除的作用:属性和属性值都没了

    <div style="background-color:red"  id="id"></div>
    //赋值为空字符串:属性还在,但是值没了
    div.id= "";//<div style="background-color:red"  id=""></div>
    div.setAttribute('id','');//<div style="background-color:red"  id=""></div>
    //移除效果: 这个属性没了
    div.removeAttribute('id') //<div style="background-color:red"  ></div>

 

7、 事件操作(重点)

给元素注册事件, 采取  事件源.on事件类型 = 事件处理程序

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈善强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值