节点操作

351 阅读1分钟

获取元素通常使用两种方式:

1.利用DOM提供的方法获取元素

  • document.getElementById()
  • document.getElementsByTagName()
  • document.querySelector等
  • 逻辑性不强、繁琐

2.利用节点层级关系获取元素

利用父子兄节点关系获取元素 逻辑性强,但是兼容性稍差

3.节点概述

一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性。

  • 元素节点 nodeType为1
  • 属性节点 nodeType为2
  • 文本节点 nodeType为3(文本节点包含文字、空格、换行等)

4.节点层级

利用DOM树可以把节点划分为不同的层级关系,常见的是父子兄层级关系。

5.父节点操作

//操作DOM
var erweima = document.querySelector('.erweima');

//查看父节点 parentNode
//得到的是离元素最近的父级节点,找不到父节点就返回null
console.log(erweima.parentNode);

6.子节点操作

<ul>
   <li>第1li</li>
   <li>第2li</li>
   <li>第3li</li>
   <li>第4li</li>
</ul>
<div class="demo">
    <div class="box">
       <span class="test">++</span>
    </div>
</div>
<script>
//操作DOM
var ul = document.querySelector('ul');
var lis = ul.querySelectorAll('li');

//查看子节点 childNodes所有的子节点包含 元素节点 文本节点 等等
console.log(ul.childNodes);
console.log(ul.childNodes[0].nodeType);
console.log(ul.childNodes[1].nodeType);
console.log(ul.childNodes[2].nodeType);
console.log(ul.childNodes[3].nodeType);
</script>

image.png

获取所有子元素节点

console.log(ul.children);

获取第一个子元素和最后一个子元素

//节点操作 第一个子元素和最后一个子元素
//返回全部元素。包括空格以及元素
console.log(ul.firstChild);
console.log(ul.lastChild);

//只返回元素节点,但兼容性有问题
console.log(ul.firstElementChild);
console.log(ul.lastElementChild);

//实际开发中的写法,没有兼容性问题
console.log(ul.children[0]);
console.log(ul.children[ul.children.length-1]);

下拉菜单

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        li {
            list-style-type: none;
        }
        
        a {
            text-decoration: none;
            font-size: 14px;
        }
        
        .nav {
            margin: 100px;
        }
        
        .nav>li {
            position: relative;
            float: left;
            width: 80px;
            height: 41px;
            text-align: center;
        }
        
        .nav li a {
            display: block;
            width: 100%;
            height: 100%;
            line-height: 41px;
            color: #333;
        }
        
        .nav>li>a:hover {
            background-color: #eee;
        }
        
        .nav ul {
            display: none;
            position: absolute;
            top: 41px;
            left: 0;
            width: 100%;
            border-left: 1px solid #FECC5B;
            border-right: 1px solid #FECC5B;
        }
        
        .nav ul li {
            border-bottom: 1px solid #FECC5B;
        }
        
        .nav ul li a:hover {
            background-color: #FFF5DA;
        }
    </style>
</head>

<body>
    <ul class="nav">
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
        <li>
            <a href="#">微博</a>
            <ul>
                <li>
                    <a href="">私信</a>
                </li>
                <li>
                    <a href="">评论</a>
                </li>
                <li>
                    <a href="">@我</a>
                </li>
            </ul>
        </li>
    </ul>
    <script>
        var nav = document.querySelector('.nav');
        var lis = nav.children;

        console.log(lis);

        for(var i = 0;i<lis.length;i++) {
            lis[i].onmouseover = function() {
                this.children[1].style.display = 'block'
            }
            lis[i].onmouseout = function() {
                this.children[1].style.display = 'none'
            }
        }
    </script>
</body>

</html>