认识与了解前端Dom

news2024/11/25 2:23:12

Dom

文档对象模型
Dom是关于创建,修改,插入,删除页面元素的标准
Dom赋予我们操作操作页面的能力

页面的内容都是字符串,js会把这些字符串转换成DOM树,DOM树会把字符串转换成节点,其实我们操作DOM的根本就是操作节点

Dom结构

在这里插入图片描述

DOM节点

            var box = document.getElementById("box");
            var attr = box.attributes;//元素属性节点的集合
            console.log(attr);
            console.log(attr[0]);//id=box

            var child = box.childNodes;//元素子节点的集合
            console.log(child);

            //元素节点,(常用)
            console.log(box.nodeName); //div
            console.log(box.nodeType);  //1

            //属性节点
            console.log(attr[0].nodeName);//id
            console.log(attr[0].nodeType); //2

            //文本节点
            console.log(child[0].nodeName);//#text
            console.log(child[0].nodeType);//3

            //注释节点
            console.log(child[3].nodeName);//#comment
            console.log(child[3].nodeType);//8


            //文档节点
            console.log(document.nodeName);//#document
            console, log(document.nodeType);//9
  • arrtibutes
    属性节点,返回元素身上的所有属性节点,每个属性都会有一个自己对应的下标
    其中length属性代表元素身上有多少个属性节点

  • childNodes
    元素身上的第一层子节点,返回元素身上的所有子节点的集合(第一层)

  • nodeName
    节点的名称
    任何一个节点都会有这个属性

  • nodeType
    节点的类型,返回的是一个数字

nodeName与tagName的区别

    <script>
        window.onload = function () {
            var box = document.getElementById("box");//元素节点

            console.log(box.nodeName);//div
            console.log(box.tagName);//div

            console.log(document.nodeName);//#document
            console.log(document.tagName);//undefined
        }
    </script>

nodeName节点名称,任何一个节点都有节点名称
tagName 标签名称,只有元素节点才有这个属性

点击子节点隐藏父节点

<body>

    <script>
        /**
         * 点击span隐藏li
         * **/
        window.onload = function () {
            var spans = document.querySelectorAll("span");
            var lis = document.querySelectorAll("li");

            for (var i = 0; i < spans.length; i++) {
                spans[i].index = i;
                spans[i].onclick = function () {
                    lis[this.index].style.display = 'none';
                }
            }
        }
    </script>
    <ul>
        <li><span>隐藏1</span></li>
        <li><span>隐藏2</span></li>
        <li><span>隐藏3</span></li>
        <li><span>隐藏4</span></li>
        <li><span>隐藏5</span></li>
    </ul>
</body>

查找节点

  • parentNode
    元素的父节点
    属性节点是没有父节点的
<body>
    <script>
        window.onload = function () {
            var box = document.getElementById("box");
            var p = box.querySelector('p');//元素节点

            console.log(p.parentNode);//div

            var attr = p.attributes;//属性节点
            console.log(attr[0].parentNode);//null


            //属性不能找父级节点,属性属于标签
            //注释是由父节点的
            var child = box.childNodes; //box里所有的子节点
            console.log(child[3].parentNode);//div#box
        };
    </script>
    <div id="box">
        <p style="width:100px;"></p>
        <!--  -->
    </div>
</body>

使用元素父节点完成【点击子元素隐藏父节点】

<body>

    <script>
        /**
         * 点击span隐藏li
         * **/
        window.onload = function () {
            var spans = document.querySelectorAll("span");


            for (var i = 0; i < spans.length; i++) {
                spans[i].onclick = function () {
                    this.parentNode.style.display = 'none';
                    //this.parentNode                   //li
                    //this.parentNode.parentNode        //ul
                    //this.parentNode.parentNode.parentNode //body
                    //之后的父级html,#document,null
                }
            }
        }
    </script>
    <ul>
        <li><span>隐藏1</span></li>
        <li><span>隐藏2</span></li>
        <li><span>隐藏3</span></li>
        <li><span>隐藏4</span></li>
        <li><span>隐藏5</span></li>
    </ul>
</body>
  • children(非标准
    父级.children
    获取到父级下的第一层子元素,它是一个集合,代表所有的子元素,每个子元素都有一个对应下标
    它还有一个length属性,代表子元素的个数

  • childrenNodes
    获取元素的第一层的所有子节点,包括文本注释

<body>
    <script>
        window.onload = function () {
            var ul = document.querySelector("ul");
            console.log(ul.children);

            function getChild(parent) {
                var child = parent.childNodes;
                var arr = [];

                for (var i = 0; i < child.length; i++) {
                    if (child[i].nodeType == 1) {
                        arr.push(child[i]);
                    }
                }
                return arr;
            }
            var lis = getChild(ul);
            console.log(lis);
        }

    </script>
</body>
  
  • previousElementSibling
    找到上一个兄弟节点,找不到就返回null
    <script>
        window.onload = function () {
            var lis = document.querySelectorAll("li");

            lis[3].previousElementSibling.style.background = 'red';

            console.log(lis[0].previousElementSibling);//null
            lis[0].previousElementSibling.style.background = 'red';//error
        }
    </script>
    <ul>
        <li><span>隐藏1</span></li>
        <li><span>隐藏2</span></li>
        <li><span>隐藏3</span></li>
        <li><span>隐藏4</span></li>
        <li><span>隐藏5</span></li>
    </ul>
  • nextElementSibling
    找下一个兄弟节点,找不到返回null
  • firstElementChild
    父级.firstElementChild
    找到第一个子节点
    <script>
        window.onload = function () {
            var lis = document.querySelectorAll("li");
            var ul = document.querySelector("ul");

            ul.firstElementChild.style.background = 'red';
        }
    </script>
    <ul>
        <li><span>隐藏1</span></li>
        <li><span>隐藏2</span></li>
        <li><span>隐藏3</span></li>
        <li><span>隐藏4</span></li>
        <li><span>隐藏5</span></li>
    </ul>

找第一个兄弟节点的代码运行效果

  • lastElementChild
    找最后一个兄弟节点

元素最近的有定位的父级之间的距离

  • offsetLeft
    作用:找到元素最近的有定位的父级之间的距离,不带单位并且不带边框

语法:
元素.offsetLeft

  • offsetTop
    找到元素最上方离最近的有定位父级之间的距离,不带单位并且不带边框
    注意:如果没有定位的父级,默认是到html的距离
    遵循一个原则:
    1.给父级定位
    2.一上来清除默认样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/47179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS布局的三种方式

绝对定位 绝对定位&#xff1a; ​ 属性&#xff1a;position 值&#xff1a;absolute <style> p.abs{position: absolute;left: 150px;top: 50px; }</style><p >正常文字1</p> <p >正常文字2</p> <p class"abs" >绝对定…

Postman常用断言功能解析

一、Postman断言模块 二、七种常规业务断言 前4种最常用&#xff1a; 1&#xff09;Status code:Code is 200 检查返回的状态码是否为200 2&#xff09;Response body:Contains string 检查响应中包括指定字符串 3&#xff09;Response body:Json value check 检查响应中其中js…

C++ Reference: Standard C++ Library reference: Containers: list: list: cbegin

C官网参考链接&#xff1a;https://cplusplus.com/reference/list/list/cbegin/ 公有成员函数 <list> std::list::cbegin const_iterator cbegin() const noexcept; 返回开始的常量迭代器 返回指向容器第一个元素的const_iterator对象。 const_iterator是指向const内容…

不用ps也能在线设计电商详情页的方法

食品类的商品要如何设计排版详情页呢&#xff1f;怎么样排版食品类商品的详情页才好看&#xff1f;想设计一张好看食品的详情页其实是有方法的&#xff0c;下面跟着小编学习如何使用在线工具乔拓云&#xff0c;在线设计一个食品商品的详情页&#xff0c;还有海量的商品详情页模…

mysql索引类别和失效场景

首先&#xff0c;我们为什么要使用索引&#xff0c;索引有什么作用呢&#xff1f; 索引可以用来快速查询数据表中有某一特定值的记录&#xff0c;大大加快数据的查询速度&#xff1b;在列上创建了索引之后&#xff0c;查找数据时可以直接根据该列上的索引找到对应记录行的位置…

经典文献阅读之--PL-SLAM(点线SLAM)

0. 简介 之前作者基本都在围绕着特征点提取的路径在学习&#xff0c;最近看到了最近点云PCL推送的《Structure PLP-SLAM: Efficient Sparse Mapping and Localization using Point, Line and Plane for Monocular, RGB-D and Stereo Cameras》。这个工作是基于OpenVSLAM架构的…

测评 | 基于AM5708开发板——AM5708 SOC使用uboot更新uboot

本次测评板卡是创龙科技旗下的TL570x-EVM,它是一款基于TI Sitara系列AM5708ARM Cortex-A15+浮点DSPC66x处理器设计的异构多核SOC评估板,由核心板和评估底板组成。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 评估板接口资源丰富,引出…

学苑教育杂志学苑教育杂志社学苑教育编辑部2022年第32期目录

前沿 学苑简讯《学苑教育》投稿&#xff1a;cn7kantougao163.com 4-6 专题研究 把握有效生成 焕发课堂魅力——小学语文课堂有效动态生成策略探析 任云青; 7-811 教育管理 新课程理念下高中契约式班级管理研究 孙磊; 9-11 小学班级管理中文明礼仪教育实施策略的…

Ubuntu 20.04 上学习Open vSwitch :VxLAN

参考 OpenvSwitch完全使用手册 云计算底层技术-使用openvswitch Open vSwitch 概述&#xff1b;OVS支持的功能&#xff1b;ovs的模块介绍&#xff08;ovs-vswitchd、ovsdb-server等等 学习环境 学习 OpenStack 2 个 Hyper-V 虚拟机 Ubuntu 20.04 203.0.113.101 /24 ( 网关&a…

Git——入门介绍

目录1.Git概述1.1.版本控制1.2.版本控制工具1.2.1集中式版本控制工具1.2.2分布式版本控制工具1.3.Git 工作机制1.4.Git 和代码托管中心2.Git下载安装2.1.Git下载2.2.Git安装3.Git常用命令3.1.设置用户签名3.2.初始化本地库3.3.查看本地库状态3.4.添加暂存区3.5.提交本地库3.6.修…

6、python的高级特性(生成式、生成器、闭包、装饰器)

文章目录生成式列表生成式字典生成式集合生成式生成器生成器的实现方式将生成式改写成生成器。将[ ] 改成 ( )使用yield关键字闭包装饰器生成式 列表生成式 在“先有一个空列表&#xff0c;然后通过循环依次将元素添加到列表中”的场景&#xff0c;可以使用列表生成式。 列表…

核心解读 - 2022版智慧城市数字孪生标准化白皮书

核心解读 - 2022版智慧城市数字孪生标准化白皮书前言&#xff1a;城市数字孪生基本概念一、城市数字孪生概述1、城市数字孪生内涵及概念模型2、城市数字孪生典型特征3、城市数字孪生相关方4、城市数字孪生技术参考架构5、城市数字孪生关键技术二、智慧城市数字孪生发展现状1、政…

JMeter下载及安装配置教程

参考&#xff1a;入门部署教程 – Jmeter中文网 本文是在win10环境下安装使用jmeter&#xff0c;jmeter可以运行在多平台上Windows和Linux。 环境准备&#xff1a; java 8 jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境&#xff0c;需安装JDK1.8环境&#xff0c;JDK下载地…

基于若依springboot二次开发WMS带移动端管理系统vue源码

系统是前后端分离的架构&#xff0c;前端使用Vue2&#xff0c;后端使用SpringBoot2。搭建部署的方式也是挺简单的&#xff0c;还带有uniapp开发的多端移动端扫码入库功能 技术架构 技术框架&#xff1a;SpringBoot2.0.0 Mybatis1.3.2 Shiro swagger-ui jpa lombok Vue2 …

轻薄笔记本能不能带起来高刷的显示器??

先说结论&#xff0c;新款集显也可以&#xff0c;用TYPC或者DP线连&#xff0c;使用时关闭主屏&#xff0c;只显示外屏。 这个问题&#xff0c;已经困扰了很久~~~ 软件上&#xff0c;windows以主屏作为主刷新率&#xff0c;除非笔记本自身是高刷屏&#xff0c;否则请只使用外…

单应性矩阵在标定中的应用

1.单应性矩阵是什么&#xff1f; 言简意赅定义&#xff1a;定义在两个不同视角中对同一平面范围内的特征点的射影变换&#xff08;projective transformation&#xff09;即&#xff1a; x1 H*x2 //x1、x2为匹配点 上图中x&#xff0c;x‘为一对匹配点&#xff0c;通过单应矩…

Pytest自动化框架运行全局配置文件pytest.ini

前言 还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一&#xff0c;他有基础的脚本编码规则以及两种运行方式。 pytest的基础编码规则是可以进行修改&#xff0c;这就是今日文章重点。 看到这大家心中是否提出了两个问题&#xff1a;pytest的基础编码规则在…

Array_JavaScript

Array 学习路线&#xff1a;JavaScript基础语法&#xff08;输出语句&#xff09;->JavaScript基础语法&#xff08;变量&#xff09;->JavaScript基础语法&#xff08;数据类型&#xff09;->JavaScript基础语法&#xff08;运算符&#xff09;->JavaScript基础语…

python数据容器——列表

目录 一.数据容器 二.数据容器——列表 基本语法 注意 三.列表的下标&#xff08;索引&#xff09; 嵌套列表的下标&#xff08;索引&#xff09; 四.列表的常用操作&#xff08;方法&#xff09; 1.查询元素下标 2.插入元素 3.删除元素 4.统计元素 说明 一.数据容器 1&a…

使用react-sizeme解决react-grid-layout中侧栏(抽屉)展开或隐藏时不会自适应容器大小的问题

文章目录使用react-sizeme解决react-grid-layout中侧栏(抽屉)展开或隐藏时不会自适应容器大小的问题前提概要问题代码解决代码参考使用react-sizeme解决react-grid-layout中侧栏(抽屉)展开或隐藏时不会自适应容器大小的问题 前提概要 在上一篇博文中&#xff0c;我们讲到了使…