DOM02

DOM节点

一、节点:

网页中所有的内容都是节点(标签、属性、文本、注释),在DOM中,节点是使用node表示,节点可以增删改查

节点分为:nodeType:节点类型 nodeName节点名称 nodeValue:节点值

节点有父子 兄弟

二、父节点:通过子元素(先获取)找寻父节点(都是属性)

<body>
    <div class="box">
        <div class="sbox">123</div>
    </div>
    <script>
        var sbox = document.querySelector('.sbox')
        //parentNode 父节点 语法:子元素对象.parentNode 一直朝上查找父节点,直到找到document,在朝上查找会显示null

        console.log(sbox);
        //parentElement 终端父节点是html 再朝上查找就会返回null
        console.log(sbox.parentElement.parentElement);
    </script>
</body>

三、子节点:通过父元素(先获取)找寻子节点(都是属性)

<body>
    <ul>
        <!-- 
            子节点
         -->
        <li>11</li>
        <li>22</li>
        <li>33</li>
        <li>44</li>
    </ul>
    <script>
        var ul = document.querySelector('ul')
        //子节点(伪数组) childNodes 所有的子节点(换行 注释 标签),
        // console.log(ul.childNodes)//11
        // console.log(ul.childNodes[0].nodeType)//3
        // console.log(ul.childNodes[1].nodeType)//8
        // console.log(ul.childNodes[2].nodeType)//3
        // console.log(ul.childNodes[3].nodeType)//1
        // console.log(ul.childNodes[4].nodeType)//3
        // console.log(ul.childNodes[5].nodeType)//1
        // for(var i=0;i<ul.childNodes.length;i++){
        //     if(ul.childNodes[i].nodeType==1){
        //         console.log(ul.childNodes[i]);
        //     }
        // }
        //childen 获取所有子节点的元素(伪数组),不包含空格、注释等 IE9以上才会支持
        console.log(ul.children)//HTMLCollection(4)
        for(var i=0;i<ul.children.length;i++){
            console.log(ul.children[i])
        }

        //firstChild 拿到的是第一个子节点(如果有空格 拿到的就是空格)
        // console.log(ul.firstChild);
        
        //firstElementChild 拿到的是第一个子元素()
        console.log(ul.firstElementChild)

        //lastChild 拿到的是最后一个子节点(如果有空格 拿到的就是空格)
        console.log(ul.lastChild);

        //lastElementChild 拿到的是最后一个一个子元素()
        console.log(ul.lastElementChild)

        // console.log(ul.lastElementChild.innerHTML)
        // ul.lastElementChild.innerHTML = '12345'
        // console.log(ul.lastElementChild.innerHTML)
        </script>
</body>

四、兄弟节点:通过子元素(先获取)找寻兄弟节点(都是属性)

<body>
    <ul>
        <li>1</li>上
        <li class="lili">2</li>下
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        var lili = document.querySelector('.lili')
        //nextSibliing 查找下一个兄弟节点(如果有空格 查找的就是空格)
        console.log(lili.nextSibling);
        //nextElementSibling 查找下一个兄弟元素
        console.log(lili.nextElementSibling);
        //previousSibling 查找上一个兄弟节点(如果有空格 查找的就是空格)
        console.log(lili.previousSibling);
        //previousElementSibling 查找上一个兄弟元素
        console.log(lili.previousElementSibling);
    </script>
</body>

五、创建节点、追加(插入)节点、删除节点、替换节点、克隆(复制)节点

<script>
    // var arr = [ '王多磊','丁龙祥','王金刚','郑日安','王玉']
    //createElement  创建元素(都是在父元素里面操作) 先创建
    var div = document.createElement('div')
    var box = document.querySelector('.box')
    var box1 = document.querySelector('.box1')
    //把创建的元素插入到页面中 appendChild(需要插入的节点) 插入到父元素的最后一个子元素 
    box.appendChild(div)
    div.className = 'box2'
    div.id = 'box3'
    div.innerHTML = '22222'
    div.style.color = 'red'
    
    //兄弟元素 insertBefore(要插入的节点,谁的前面)插入谁的前面
    box.insertBefore(div,box1)
    //每次创建追加的新的节点都在父元素的第一个
    box.insertBefore(div,box.children[0])
    var div2 = document.createElement('div')
    div2.innerHTML = '333333'
    box.appendChild(div2)

    // 删除节点(移除) 父元素.removeChild(想要移除的元素) 必须通过父元素删除
    // box.removeChild(box1)
    // renmove()移除自己以及自己的后代 括号里什么都不需要写
    // box.remove()

    //替换节点replaceChild(新的节点,老的节点):替换的新的节点会消失
    box.replaceChild(div2,box1)

    //克隆节点cloneNode() 如果括号内为空/false 则是浅拷贝(只克隆自己):只克隆标签
                        // 如果括号内为true 则是深拷贝(也会克隆自己的子孙后代):克隆标签及其内容

    var clone = div2.cloneNode(true)
    console.log(clone);   
</script>

六、经典案例

<body>
    <button>新增</button>
    <ul class="ul2">

    </ul>
    <script>
        var arr = [ '王多磊','丁龙祥','王金刚','郑日安','王玉']
        var btns = document.querySelector('button')
        var ul2 = document.querySelector('.ul2')
        
        var num=0
        btns.onclick = function (){    
            if(num>4)  return    
            var li =document.createElement('li')
            ul2.appendChild(li)
            li.innerHTML = arr[num]
            var btn =document.createElement('button')
            li.appendChild(btn)
            btn.innerHTML = '删除'
            num++
            btn.onclick = remove
/*             var btn = document.querySelector('button')//不用在获取了 获取就错了
            btn.onclick = function(){
                li.remove()
            } */
            // li.removeChild(btn)
        }
        function remove() {
            console.log(this)
            this.parentNode.remove()
        }       
    </script>
</body>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值