当前位置: 首页 > article >正文

web五、元素尺寸和位置、节点操作(DOM,查找节点,增加节点,删除节点)、阶段案例

一、元素尺寸与位置

注意:offset家族返回不带单位的数字,而且都是只读

1,元素尺寸(大小)

大小: offsetWidthoffsetHeight

获取元素的自身宽高、包含元素自身设置的宽高、padding、border

返回的是数字不带单位,并且是只读属性

1,元素位置

offsetLeft offsetTop

获取元素距离自已定位父级元素的左、上距离,跟绝对定位类似

如果父级都没有定位则以浏览器文档为准

返回的是数字不带单位,并且是只读属性

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>元素的尺寸和位置</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .father {
            position: relative;
            width: 300px;
            height: 300px;
            padding: 5px;
            border: 10px solid red;
            margin: 100px;
            background-color: pink;
        }
        
        .son {
            width: 100px;
            background-color: purple;
        }
    </style>
</head>

<body>
    <div class="father">
        <div class="son">
            里面包含一些文字 里面包含一些文字 里面包含一些文字
        </div>
    </div>
    <div class="box">ji的另一个盒子</div>
    <script>
        /**
         * offsetWidth和offsetHeight 获取元素的自身宽高、
         *包含元素自身设置的 宽高、padding、border返回的是数字不带单位,并且是只读属性
         */
        /**
         *  offsetLeft 和 offsetTop 获取元素距离自己定位父级元素的左、上距离,跟绝对定位类似
         *如果父级都没有定位则以浏览器文档为准,返回的是数字不带单位,并且是只读属性
         */

        const father = document.querySelector('.father')
        console.log(father.offsetWidth, father.offsetHeight) //329 329
            //获取father的宽度和高度设置给box的width和height属性
        const box = document.querySelector('.box')
        box.style.width = father.offsetWidth + 'px'
        box.style.height = `${father.offsetHeight}px`
        console.log(box.style.width, box.style.height) //329px  329px
            //不生效:offsetWidth和offsetHeight都是只读属性
            //father.offsetwidth ='5oopx

        // /获取距离定位父级左上角的距离
        //如果父级都没有定位,获取到的距离是距离浏览器左上角的
        const son = document.querySelector('.son')
        console.log(son.offsetLeft, son.offsetTop) //5 5
    </script>
</body>

</html>

节点操作

二、DOM节点

DOM树: DOM 将 HTML 文档以 树状结构 直观的表现出来,我们称之为 DOM 树 或者 节点树
节点(Node) DOM树里每一个点都称之为节点

节点分类:

元素节点 比如 div标签,body、
属性节点: 所有的属性 比如href,class属性
文本节点 :所有的文本,比如标签里面的文字

三、查找节点

利用节点关系查找节点,返回的都是对象

1,父节点查找

子元素.parentNode。 返回最近一级的 父节点 对象,找不到返回为 null
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>王者荣耀关闭登录案例</title>
    <style>
        .pop {
            display: block;
            visibility: visible;
            position: fixed;
            z-index: 9999;
            left: 50%;
            top: 50%;
            width: 530px;
            height: 254px;
            margin-top: -127px;
            margin-left: -265px;
            background: url(./images/login.webp) no-repeat;
        }
        
        .close {
            position: absolute;
            right: 0;
            top: 0;
            width: 40px;
            height: 40px;
        }
        
        @keyframes slideUp {
            to {
                height: 0;
            }
        }
        
        @keyframes hidden {
            to {
                display: none;
            }
        }
        
        .hide {
            animation: slideUp .3s linear forwards, hidden .3s .3s forwards;
        }
    </style>
</head>

<body>
    <div class="pop">
        <a href="javascript:;" class="close"></a>
    </div>
    <script>
        // 子元素.parentNode。返回最近一级的父节点对象,找不到返回为 null
        const colose = document.querySelector('.close')
            // 查找父节点
        colose.addEventListener('click', function() {
            //找到x的父节点,增加类名隐藏,从而关闭页面
            colose.parentNode.classList.add('hide')
        })
    </script>
</body>

</html>

2,子节点查找

节点对象(父).children(重点)。得所有子元素节点,返回的是一个伪数组。

3,兄弟关系查找

下一个兄弟

节点对象.nextElementSibling。该属性获取节点的下一个兄弟节点

上一个兄弟

点对象.previousElementSibling。该属性获取节点的上一个兄弟节点

<body>
    <ul>
        <li>第1个li</li>
        <li>第2个li</li>
        <li>第3个li</li>
        <li>第4个li</li>
        <li>第5个li</li>
    </ul>

    <script>
        // 节点对象.children(重点)。得所有子元素节点,返回的是一个伪数组。
        const ul = document.querySelector('ul')
            //通过父级查找所有的子级返回一个伪数组
        console.log(`通过父级查找所有的子级`, ul.children)
            // 通过父级查找所有的子级中的某一个
        console.log(ul.children[2])
            // console.log(ul.children)//如果数据为空,父级里没有子级,返回空的数组[ ]


        // 节点对象.nextElementSibling。该属性获取节点的下一个兄弟节点
        //nextElementSibling下一个兄弟元素
        console.log(`下一个兄弟元素`, ul.children[2].nextElementSibling) //相当于返回索引是3的兄弟元素

        // 节点对象.previousElementSibling。该属性获取节点的上一个兄弟节点
        // previousElementSibling 上一个兄弟元素
        console.log(`上一个兄弟元素`, ul.children[2].previousElementSibling)
    </script>
</body>

四、增加节点

1.创建节点

创造一个新的元素节点:document.createElement('标签名')

2.追加节点

要想在界面看到,还得插入到某个父元素中

父元素最后一个子节点之后,插入节点元素:element.append ( )

父元素第一个子元素的之前,插入节点元素:element.prepend( )

<body>
    <ul>
        <li>我是默认的li</li>
    </ul>

    <script>
        //在ul的子级前面或子级后面添加一个新的i
        const ul = document.querySelector('ul')

        //先创建一个节点(需要添加的节点),写入页面 document.createElement
        const newli = document.createElement('li') //空的标签

        // 在子级的最后添加节点
        ul.append(newli)
            // -----------------如果创建新添加的节点就一个,但前后都添加上了,最后一个生效-----------------------------
            //子级的前面添加节点
        ul.prepend(newli)
    </script>
</body>

五、删除节点

element.remove ( )。把对象从它所属的DOM树中删除
 

删除节点和隐藏节点有区别的:

隐藏节点还是存在的,但是删除,则从DOM树中删除

隐藏:(display.none)透明度opacity    隐藏visibility


<body>
    <div class="remove">这是要删除的 div</div>
    <div class="none">这是要隐藏的 div</div>

    <script>
        const removeEL = document.querySelector('.remove')

        //删除节点
        removeEL.remove()
            // 隐藏节点
        const noneL = document.querySelector('.none')
        noneL.style.opacity = 0
            // 细节: 一个标签一会显示一会隐藏--来回切换的, 
            // 用dispalay:none或透明度opacity或者visibility --性能好
    </script>
</body>


http://www.kler.cn/a/421950.html

相关文章:

  • MySQL篇—通过官网下载linux系统下多种安装方式的MySQL社区版软件
  • 使用playwright自动化测试时,npx playwright test --ui打开图形化界面时报错
  • Hive基础篇
  • 【IMF靶场渗透】
  • Nginx配置限流,技能拉满!
  • Nodejs-初体验-1
  • C++ 游戏开发入门
  • Python将Excel文件转换为JSON文件
  • 真实情景之:处理用户密码时的“加盐”措施
  • 基于 MVC 的 SpringBoot 高校行政事务管理系统:设计布局与实现效能评估
  • 泷羽sec学习打卡-shell命令5
  • 面向对象(二)——类和对象(上)
  • DevOps工程技术价值流:GitLab源码管理与提交流水线实践
  • 计算机网络-Wireshark探索IPv4
  • C# 元组
  • 外卖开发(三)开发笔记——AOP实现实现公共字段填充、主键回显、抛异常和事务管理
  • Matlab图像处理——基于内容的图像检索GUI
  • 基于云模型的车辆行驶速度估计算法matlab仿真
  • 【C++】数组
  • jmeter 获取唯一全局变量及多线程读写的问题