JavaScript 实战技巧:让你成为前端高手的必备知识3(进阶版)

一、DOM概述

  (一)DOM操作

是指使用‌JavaScript操作文档对象模型(Document Object Model)的过程。‌文档对象模型是一种表示网页文档结构的方式,它将整个网页文档表示为一个树形结构,每个元素都是一个节点,包括元素节点文本节点属性节点等。通过DOM操作,可以动态地改变网页的内容结构和样式,实现与用户的交互以及动态更新页面内容。常见的DOM操作包括创建、删除、修改元素,获取和设置元素的属性和内容,以及添加事件监听器等。

可以这么理解,DOM操作就是为了用JS程序代替人工直接修改HTML和CSS代码

(二)DOM Tree

浏览器会根据DOM 模型,将结构化文档HTML解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)

1、最常用的节点类型

(1)文档节点(Document Nodes)

用于表示整个HTML文档,也称为根节点,通常通过document对象访问。虽然文档节点本身不常进行增删改操作,但它提供了对整个文档的访问,是DOM操作的起点


(2)元素节点(Element Nodes)

用于表示HTML元素,如<div>、<p>等。可以通过document.createElement()方法创建元素节点,并使用appendChild()、insertBefore()等方法将其添加到DOM树中。

(3)属性节点(Attribute Nodes)

用于表示HTML元素的属性,如class、id等。虽然属性节点不是DOM树的一部分(它们存在于元素的attributes属性中),但可以通过element.setAttribute()方法设置元素的属性值

(4)文本节点(Text Nodes)

用于表示元素节点中的文本内容。可以通过document.createTextNode()方法创建文本点,并使用appendChild()等方法将其添加到元素节点中

2、节点间的关系:

节点具有父子关系和同级关系等。除了根元素没有父节点,其他元素都有父节点,一个父节点可以有多个子节点

二、DOM操作

(一)获取节点

1、通过标签名获取节点(getElementsByTagName方法):

搜索HTML标签名,返回符合条件的元素。它的返回值是一个类似数组的对象(HTMLCollection实例)。如果没有任何匹配的元素,就返回一个空集。‌

<body>
    <p class="pp" id="duanluo1">我是段落1</p>
    <p class="pp">我是段落2</p>
    <p class="pp" id="duanluo3">我是段落3</p>

    <script>

        // getElementsByTagName 通过标签名来获取节点 (若有多个相同标签,返回含有多个节点的类数组对象)
        const p1 = document.getElementsByTagName("p");  
        console.log(p1[0]);//输出p标签的第一个
        console.log(p1[1]);//输出p标签的第二个
        console.log(p1[2]);//输出p标签的第三个
        
    </script>
    
</body>

2、通过类名获取节点(document.getElementsByClassName()方法‌:

获取具有指定类名的所有节点。返回一个类似数组的对象(HTMLCollection实例),包括
了所有class名字符合指定条件的元素。

 // getElementsByClassName 通过class名来获取节点(若有多个相同class,返回含有多个节点的类数组对象)
        const p2 = document.getElementsByClassName("pp");
        console.log(p2[0]);
        console.log(p2[1]);
        console.log(p2[2]);

3、通过ID获取节点‌(document.getElementById()方法):

获取具有指定ID的单个节点,直接返回匹配指定id属性的元素节点(而不是类似数组的对象)。

<body>
    <p class="pp" id="duanluo1">我是段落1</p>
    <p class="pp">我是段落2</p>
    <p class="pp" id="duanluo3">我是段落3</p>

    <script>
        // // getElementById 通过id名来获取节点(直接返回可操控的节点)
        const p3 = document.getElementById("duanluo3");
        console.log(p3);
    </script>
    
</body>

4、通过选择器获取节点‌(document.querySelector()方法):

获取第一个匹配的元素,。接受一个CSS选择器作为参数,返回匹配该选择器的元素节点。如果有
多个节点满足匹配条件,则返回第一个匹配的节点。如果没有发现匹配的节点,则返回 null

        const p5 = document.querySelector(".pp");
        console.log(p5);

5、获取所有匹配的元素(document.querySelectorAll()方法):

获取所有匹配的元素。与querySelector 用法类似,区别是返回一个NodeList 对象,包含
所有匹配给定选择器的节点

 const p4 = document.querySelectorAll(".pp");
 console.log(p4);

(二)属性的查看与修改

1、id 属性:

读写当前元素节点的 id 名

        const p = document.getElementById("p3");
        console.log(p);

2、className 属性:

用来读写当前元素节点的 class 名

        console.log(p.id);
        console.log(p.className);

3、classList 属性是一个对象,有下列方法:

add() :增加一个 class 名

remove() :移除一个 class 名

contains() :检查当前元素是否包含某个 class 名返回布尔值

        // 为classList添加一个新的class名
        p4.classList.add("xx");
        console.log(p4.classList);
        // 为classList移除一个class名
        p4.classList.remove("ww");
        console.log(p4.classList);
        // 检查classList中是否存在某个class名,返回布尔值。
        console.log(p4.classList.contains("xx"));
        console.log(p4.classList.contains("ww"));

4、innerHTML:

 返回一个字符串,等同于该元素包含的所有HTML代码。该属性可读写,常用来设置某个节点的内容。它能改写所有元素节点的内容,包括 <HTML> 和 <body> 元素。

5、innerText:

和innerHTML类似,不同的是innerText无法识别元素,会直接渲染成字符串。

6、其他属性的查看与修改(以<img>标签为例)

<body>

    <img src="./img_src/logo.png" alt="图片加载失败" id="img1">

    <script>
        const i = document.getElementById("img1");  
        console.log("修改前:"+ i.src);
        i.src = "./img_src/logo1.png";    // 修改src属性
        console.log("修改后:"+ i.src);
    </script>

(三)新节点的创建与插入

1、新节点的创建

(1)生成标签节点(createElement 方法)

创建一个新的HTML元素,用来生成标签节点,并返回该节点。

var p4 = document.createElement("p");
(2)生成文本节点(createTextNode 方法)

用来生成文本节点,并返回该节点。它的参数是文本节点的内容。

var t4 = document.createTextNode("我是段落");
(3)生成属性节点(createAttribute 方法)

生成一个新的属性节点,并返回该节点。可通过该节点的value属性,对其赋值。

        var a4 = document.createAttribute("class"); // 创建属性节点
        a4.value = "fruit";  // 为属性节点赋值
        console.log(a4);

2、新节点的插入

(1)增加子节点(appendChild )

 为标签节点增加子节点。将新节点插入到某个父元素的子元素列表的末尾。例如,将新的 <div> 插入到 <body> 的末尾。

 p4.appendChild(t4); 
(2)插入属性节点(setAttributeNode )

 为标签节点插入属性节点,比如name,class,id,  style等。若此属性节点已经设置到别的元素节点,则控制台会报错

p4.setAttributeNode(a4);

(3) 将已经配置号的<p>标签节点,作为子节点,插入body节点中

        const body_node = document.getElementsByTagName("body")[0];
        body_node.appendChild(p4);

三、定时器函数

(一)setInterval 函数

指定某个任务每隔一段时间就执行一次无限次的定时执行)

<script>

        function func(){
            console.log("定时任务:叫朋友起床");
        }
        setInterval(func,2000);//每隔2000ms执行一次定时任务
    </script>

(二)setTimeout 函数

用来指定某个函数,在多少毫秒之后执行(仅执行一次)。它返回一个整数表示定时器的编号,如果突然想撤销这个定时任务,可以用这个编号取消。若要定时执行多次只需多次调用setTimeout 即可

1、执行一次定时

<script>

        function func(){
            console.log("定时任务:叫朋友起床");
        }
        setTimeout(func,2000);//2秒以后(仅仅)执行一次定时任务
    </script>

2、 执行一次定时,临时想撤销这个定时任务

<script>

        function func(){
            console.log("定时任务:叫朋友起床");
        }
        const id = setTimeout(func,5000);//5秒以后(仅仅)执行一次定时任务
        clearTimeout(id);//临时有事,取消定时任务
    </script>

四、CSS样式操作

(一)修改节点style下面的属性

直接独立修改节点style下面的各种属性
注意:属性名与CSS键名有区别,主要是小写变大写

如下,修改背景颜色和字体颜色 

修改前: 

修改后: 

代码如下:

<head>
    <title>利用js修改CSS样式</title>
    <style>
        .box{
            width: 50%;
            height: 200px;
            color:blue;
            background-color: aliceblue;
            
        }
    </style>
</head>
<body>
    <div class="box"  id="div1">利用js修改CSS样式</div>
    <script>
        var e = document.getElementById("div1");
        e.style.backgroundColor = "gray";
        e.style.color = "white";
        e.style.fontSize = "30px";
    </script>
</body>

(二)修改节点的CSS代码(通过反引号实现)

直接修改该节点的CSS代码, 利用反引号来解决过长字符串的换行问题,以提高阅读性(反引号:英文输入法下,按左上角那个键)

代码如下: 

<head>
    <title>利用js修改CSS样式</title>
    <style>
        .box{
            width: 50%;
            height: 200px;
            color:blue;
            background-color: aliceblue;
            
        }
    </style>
</head>
<body>
    <div class="box"  id="div1">利用js修改CSS样式</div>
    <script>
        var e = document.getElementById("div1");
        e.style.cssText = 
        `
            background-color: gray; 
            color:green;
            font-size: 50px;
        `;
    </script>
</body>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python 网络爬虫教程:从入门到高级的全面指南

Python 网络爬虫教程&#xff1a;从入门到高级的全面指南 引言 在信息爆炸的时代&#xff0c;网络爬虫&#xff08;Web Scraping&#xff09;成为了获取数据的重要工具。Python 以其简单易用的特性&#xff0c;成为了网络爬虫开发的首选语言。本文将详细介绍如何使用 Python …

【抖音】a_bogus参数逆向分析

抖音回复评论&#xff1a; 点击——展开xxx条回复﹀就会出现 https://www.douyin.com/aweme/v1/web/comment/list/reply 直接搜又搜不到 分析调用堆栈 可以看到这个栈是有请求相关的数据的 上面一个栈 所以就是在bdms.js里面生成的 就在这里打上日志断点&#xff1a;“T…

基于SpringBoot的宠物健康咨询系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;宠物健康知识信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不…

基于大语言模型(LLM)自主Agent 智能体综述

近年来,LLM(Large Language Model)取得了显著成功,并显示出了达到人类智能的巨大潜力。基于这种能力,使用LLM作为中央控制器来构建自助Agent,以获得类人决策能力。 Autonomous agents 又被称为智能体、Agent。指能够通过感知周围环境、进行规划以及执行动作来完成既定任务。…

jmeter脚本-请求体设置变量and请求体太长的处理

目录 1、查询接口 1.1 准备组织列表的TXT文件&#xff0c;如下&#xff1a; 1.2 添加 CSV数据文件设置 &#xff0c;如下&#xff1a; 1.3 接口请求体设置变量&#xff0c;如下&#xff1a; 2、创建接口 2.1 见1.1 2.2 见1.2 2.3 准备创建接口的请求体TXT文件&#xff…

elasticsearch 8.x 插件安装(六)之Hanlp插件

elasticsearch 8.x 插件安装&#xff08;六&#xff09;之Hanlp插件 elasticsearch插件安装合集 elasticsearch插件安装&#xff08;一&#xff09;之ik分词器安装&#xff08;含MySQL更新&#xff09; elasticsearch 8.x插件&#xff08;二&#xff09;之同义词安装如何解决…

2024Python安装与配置IDE汉化教程

【一】Python解释器下载【运行环境】 【1】Python官网 [https://www.python.org]&#xff08;官网进不去的可以点击点击领取&#xff0c;100%免费&#xff01;安装包&#xff09; 包含编程资料、学习路线图、源代码、软件安装包等&#xff01;【[点击这里]】&#xff01; 【…

华为自研仓颉编程语言官网上线 首个公测版本开放下载

仓颉编程语言官网正式公开上线&#xff0c;同时首个公测版本开放下载。本次仓颉编程语言官网上线了首页、在线体验、文档、学习、下载、动态以及三方库共六个模块&#xff0c;可供开发和学习和体验。 据悉&#xff0c;仓颉编程语言是在今年6月的华为开发者大会上正式公布&…

论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

摘要 最近的信息检索研究主要集中在如何从一个任务&#xff08;通常有丰富的监督数据&#xff09;转移到其他各种监督有限的任务上&#xff0c;其隐含的假设是从一个任务可以泛化到所有其他任务。然而&#xff0c;这忽略了这样一个事实&#xff0c;即存在许多多样化和独特的检索…

Virtuoso使用layout绘制版图、使用Calibre验证DRC、LVS、PEX抽取RC

1 绘制版图 1.1 进入Layout XL 绘制好Schmatic后&#xff0c;在原理图界面点击Launch&#xff0c;点击Layout XL进入版图绘制界面。 1.2 导入元件 1、在Layout XL界面左下角找到Generate All from Source。 2、在Generate Layout界面&#xff0c;选中“Instance”&#…

微信小程序服务通知

项目中用到了小程序的服务消息通知&#xff0c;通知订单状态信息&#xff0c;下边就是整理的一下代码&#xff0c;放到项目中&#xff0c;把项目的小程序appid和小程序的secret写进去&#xff0c;直接运行即可 提前申请好小程序服务信息通知短信模板&#xff0c;代码需要用到模…

QT(图表)

目录 QChart的继承关系 基本组件和概念 常见图表类型及其系列类 常用的图表配置 一、折线图示例 二、柱状图示例 三、饼图示例 四、类波形图&#xff08;折线图&#xff09;示例 QChart 模块提供了直观的图表绘制接口&#xff0c;支持创建各种常见的图表类型&#xff0…

day13:FTP服务

一&#xff0c;FTP概述 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是用于在计算机之间传输文件的协议。它工作在网络的应用层&#xff0c;通过 TCP 协议进行数据传输&#xff0c;默认端口号为 21&#xff08;命令端口&#xff0c;另外…

2024年末Meme币市场分析:最后两个月的走势预测

进入2024年最后的两个月&#xff0c;Meme币市场正面临复杂的内外部环境&#xff0c;行情波动增大&#xff0c;许多投资者希望对年底走势做出预测&#xff0c;以便更好地调整投资策略。在这篇文章中&#xff0c;我们将从市场情绪、监管政策、技术创新和宏观经济等几个关键因素出…

ssm+vue657基于spring和vue开发的web新闻流媒体平台

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php phython node.js uniapp 微信小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不…

家电智能屏方案新选择,乐鑫SoC高集成触控语音控制,启明云端乐鑫代理商

随着科技的飞速发展&#xff0c;智能家居系统正逐渐成为现代生活的一部分。在这一变革中&#xff0c;LCD屏幕作为人机交互的核心界面&#xff0c;扮演着至关重要的角色。 它们不仅提供实时信息的展示&#xff0c;还支持丰富的交互式体验&#xff0c;使得家庭管理变得更加直观和…

ceph补充介绍

SDS-ceph ceph介绍 crushmap 1、crush算法通过计算数据存储位置来确定如何存储和检索&#xff0c;授权客户端直接连接osd 2、对象通过算法被切分成数据片&#xff0c;分布在不同的osd上 3、提供很多种的bucket&#xff0c;最小的节点是osd # 结构 osd (or device) host #主…

(六)Python结构数据类型

一、集合类型&#xff08;Sets&#xff09; Sets&#xff08;集合&#xff09;是一个无序不重复的元素集。主要功能是自动清除重复的元素。创建集合时使用大括号{}包含其中元素。 Food{西瓜,南瓜,冬瓜,北瓜} print(Food) 输出结果&#xff1a; 增加重复元素&#xff0c;则会…

补齐:相交链表:扣160

梦重新开始的地方 – 相交链表 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。图示两个链表在节点 c1 开始相交&#xff1a; 示例&#xff1a; 何解&#xff1f; 暴力&…

消息队列-Rabbitmq(消息发送,消息接收)

将来我们开发业务功能的时候&#xff0c;肯定不会在控制台收发消息&#xff0c;而是应该基于编程的方式。由于RabbitMQ采用了AMQP协议&#xff0c;因此它具备跨语言的特性。任何语言只要遵循AMQP协议收发消息&#xff0c;都可以与RabbitMQ交互。并且RabbitMQ官方也提供了各种不…