DOM的节点操作

 1、DOM:文档对象模型。核心对象是document

​ document.body

​ 2、DOM树:浏览器的JavaScript引擎(谷歌的V8引擎)在解析页面时,采用树形结构来存放页面元素

​ 3、DOM操作元素的样式:

​     (1)元素对象名.style.样式属性名 = 属性值

​     (2)HTML5对象样式的操作:

​                 a、一个元素的class属性可以有多个值:作用是在保留原有样式的基础上添加新的样式

                ​ b、如何在js程序运行过程中动态的添加class属性值:

                      ​ classList属性:是元素的class属性的列表

​ 4、classList属性提供的方法和属性

(1)属性:length —— 某个标签的class属性值的个数(即多少个类名)

​(2)方法:

        ​ a、add(‘字符串’):给元素添加类名。一次只能添加一个

        ​ b、remove(‘字符串’):将元素的类名删除。一次只能删除一个

        ​ c、toggle(‘字符串’):若类名存在则删除,不存在则添加

        ​ d、item(index):根据index,来获取元素的类名

        ​ e、contains(‘类名’):判断元素是否含有给定的类名,若有返回true,没有返回false

​ 5、DOM中节点的操作:采用操作节点的方式来操作页面中的元素

​ (1)获取节点时使用的属性:

        ​ a、firstChild:获取当前节点的首个子节点。

注意:换行符、空格等也是节点

​         b、nextSibiling:返回同一层级中指定节点之后紧跟的节点

        ​ c、lastChild:访问当前节点的最后一个子节点

        ​ d、previousSibling:返回同一层级中指定节点的前一个节点

        ​ e、nodeName:节点的名称

        ​ f、nodeValue:节点的值

        ​ g、nodeType:节点类型

​                 1:表示当前节点的类型是标签(元素)

                ​ 2:表示属性节点

                ​ 3:表示文本节点

        ​ h、parentNode:访问当前元素节点的父节点

        ​ i、childNodes:当前节点的所有子节点

                        提醒

                        getAttribute(‘id’):用来获取元素的id属性值

​                        getAttributeNode(‘id’):用来获取元素的id属性(属性节点)

强调:childNodes属性和children属性的区别

​ (1)相同点:都可以获取子元素

​ (2)不同点:

        ​ childNodes不仅包含文本节点,也包含其他的元素节点,返回值类型是NodeList

        ​ children返回的元素节点(即标签),返回值类型是HTMLCollection

 

6、追加节点

​ (1)创建元素节点:​ document.createElement()

​ (2)在指定节点的末尾追加节点:​ appendChild(newNode)

​ (3)在指定节点之前添加节点

        ​ insertBefore(newNode,node):将结点newNode插入到节点node之前

        ​ 该方法需要通过插入节点(node)的父节点来调用

<body>
    <button id="btn">插入元素</button>
    <h2 id="ht">美羊羊</h2>
    <input type="text" id="node_value">
    <script>
        //获取按钮
        let btn = document.querySelector('#btn')
        //给按钮注册click事件
        btn.addEventListener('click',function(){
            //获取input值
            let txt = document.querySelector('#node_value').value
            //创建文本节点
            let text = document.createTextNode(txt)
            //创建元素节点
            let h2 = document.createElement('h2')
            //将文本节点追加到h2中
            h2.appendChild(text)

            //获取插入位置上的标签:<h2 id="ht">美羊羊</h2>
            let ht = document.querySelector('#ht')
            if (ht.parentNode) { //ht存在父节点,通过父节点调用insertBefore插入节点
                ht.parentNode.insertBefore(h2,ht)
            }
        })
    </script>
</body>

​ (4)创建文本节点:​ document.createTextNode()

        //创建一个元素节点
        let mydiv = document.createElement('div') 
        let h2 = document.createElement('h2')
        //创建文本节点
        let txt = document.createTextNode('西安市')
        //在指定节点的末尾追加节点
        h2.appendChild(txt)
        mydiv.appendChild(h2)

        document.body.appendChild(mydiv)

练习:利用DOM创建ul无序列表

        let arr = ['西游记', '红楼梦', '水浒传', '三国演义']
        let ul = document.createElement('ul')
        for (let i = 0; i < arr.length; i++) {
            let li = document.createElement('li')
            let txt = document.createTextNode(arr[i])
            li.appendChild(txt)
            ul.appendChild(li)
        }
        document.body.appendChild(ul)

7、复制节点

​         cloneNode(deep)

​         参数deep是boolean型。true/false

                ​ true:表示深度复制(将节点及其子节点都进行复制)—- 深拷贝

                ​ false:表示浅复制(只复制节点而不复制子节点)—- 浅拷贝

<body>
    <select name="" id="sec">
        <option value="">男</option>
        <option value="">女</option>
    </select>
    <hr>
    <div id="clone"></div>
    <button id="btn_false" onclick="fun(false)">浅拷贝</button>
    <button id="btn_true" onclick="fun(true)">深拷贝</button>


    <script>
        function fun(bool){
            //获取
            let sec = document.querySelector('#sec')
            //复制
            let newSec = sec.cloneNode(bool)

            let mydiv = document.getElementById('clone')
            let br = document.createElement('br')
            mydiv.appendChild(newSec)
            mydiv.appendChild(br)
        }
    </script>
</body>

​ 8、删除子节点

​ removeChild(node)

​         (1)参数node为要删除的节点

​         (2)前提:被删除的节点必须为空(没有子节点)

9、hasChildNodes():判断当前节点是否有子节点

​         返回值为false:表示没有子节点

        ​ 返回值为true:表示有子节点

<body>
    <div id="mydiv">
        <p>伊泽瑞尔</p>
        <p>锐雯</p>
        <p>卡莎</p>
    </div>
    <button id="btn" onclick="fun()">删除</button>
    <script>
        function fun(){
            let mydiv = document.querySelector('#mydiv')

            if (mydiv.hasChildNodes()) {
                mydiv.removeChild(mydiv.lastElementChild)
            }
        }
    </script>
</body>

10、替换节点

        replaceChild(newNode,oldNode)

​        用newNode节点替换oldNode节点

<body>
    <h2 id="b1">可以替换文本内容</h2>
    输入标记:<input type="text" id="bj">
    <br>
    输入文本:<input type="text" id="txt">
    <br>
    <input type="button" value="替换" onclick="fun(txt.value,bj.value)">
    <script>
        function fun(txt,bj){

            let rep = document.getElementById('b1')
            
            if (rep) {
                let newNode = document.createElement(bj)

                newNode.setAttribute('id','b1')

                let newTxt = document.createTextNode(txt)

                newNode.appendChild(newTxt)

                rep.parentNode.replaceChild(newNode,rep)
            }
        }
    </script>
</body>

大家踊跃发言,有什么问题尽管提出来,如果没有,看都看到这了,动动小手点个赞

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值