0

0

JavaScript DOM API知识串讲

WBOY

WBOY

发布时间:2022-06-29 15:10:35

|

2419人浏览过

|

来源于CSDN

转载

本篇文章给大家带来了关于javascript的相关知识,其中主要整理了dom api知识串讲的相关问题,包括了选中页面标签、操作页面标签的属性等等内容,下面一起来看一下,希望对大家有帮助。

JavaScript DOM API知识串讲

【相关推荐:javascript视频教程web前端

1.DOM API知识串讲

1.1选中页面标签

在DOM中,document页面全局对象,里面的函数querySelector和querySelectorAll 用于选择元素,通过传入CSS选择器来达到目的,选择的范围是位于该函数之前所存在的选择器,没找到返回值为null

let obj = document.querySelector("选择器");

1

立即学习Java免费学习笔记(深入)”;

如果选择的标签在页面有多个,只会选择第一次出现在页面的标签。

2
如果想要把这些元素都选中,就需要使用querySelectorAll函数。

用法和querySelector 是一样的。

let var_name = document.querySelectorAll("选择器");

该函数会返回一个类似与数组的对象,用法和数组一模一样,但是除此之外,还能添加键值对。
3
对该数组里面的元素进行展开,会发现很多属性,这些属性都是DOM原生的一些属性。

4

1.2操作页面标签的属性

1.2.1事件

JS很多代码都是通过“事件”来触发的,比如鼠标移动,鼠标滚动,键盘输入,修改浏览器大小等等都会产生事件。

事件的三要素:

  1. 事件源,哪个HTML元素产生的事件。
  2. 事件类型,如鼠标移动,鼠标点击,窗口大小改变等。
  3. 事件处理方式,当事件产生后,要执行什么js代码。

例如,点击事件操作代码:

let button = document.querySelector("button");button.onclick = function (){
    alert("嘻嘻嘻!");}

栗子与运行效果:
5

图中给出了一种等价的写法,但是等价的写法会使HTML代码的结构更加复杂,所以更建议图中的第一种写法。

1.2.2获取元素

操作元素的分类:

  • 元素的内容。
  • 元素的属性。
  • 元素的样式。

首先,操作元素的内容可以使用innerHTML属性来获取一个标签里面的内容。

//1.选中标签let var_name = document.querySelector();//2.获取内容let content = var_name.innnerHTML;//3.修改内容var_name.innerHTML = 修改内容;

栗子:

liz
效果:
效果
我们发现相同的元素都被折叠输出了,我们可以点击开发者工具的设置栏,来设置展开输出。

设置
上面我们在所选中的标签里面放置的是文本,如果不是文本呢?其实也是一样的,假设里面放了一个列表标签,那么拿到的结果就是里面标签的HTML代码。
xiaoguo

1.2.3修改元素

我们也可以来修改HTML的内容,比如将列表改为一个标题。

代码
效果:
效果

1.2.4计数器

根据获取与修改元素的知识,我们可以来实现一个简单的计数器,基本思路就是:

  1. 获取元素内容
  2. 修改元素内容(加一操作)
  3. 写回到元素里面

代码1
效果:
效果
欸,好像与我们的预期有点不一致,原因就是修改元素内容时,拿到的内容是字符串类型的,发生的是拼接效果,而不是算术效果,所以我们需要进行转换,那如何转换?我们可以使用与java非常类似且同名的一个方法,它就是parseInt,同理如果需要小数那就有parseFloat,注意这里没有parseDouble方法哦!

代码2
效果:
效果2
我们来丰富一下,加一个按钮,可以完成减的功能。

页面代码:

    
    

0

JavaScript代码:

let plus = document.querySelector("#plus");let sub = document.querySelector("#sub");let plus_func = function() {
    //1.获取值
    let add_btn = document.querySelector("#screen");
    let val = add_btn.innerHTML;
    val = parseInt(val);
    //2.+1
    val = val + 1;
    //3.写回
    add_btn.innerHTML = val;}let sub_func = function() {
    //1.获取值
    let sub_btn = document.querySelector("#screen");
    let val =sub_btn.innerHTML;
    val = parseInt(val);
    //2.-1
    val = val - 1;
    //3.写回
    sub_btn.innerHTML = val;}plus.onclick = plus_func;sub.onclick = sub_func;

效果:

效果
但是对于但标签是没有innerHTML属性的,比如input标签,虽然不能通过innerHTML获取属性,但是可以通过value属性获取内容。

页面代码:

    
    

    

JavaScript代码:

let add = document.querySelector("#add");add.onclick = function() {
    //1.获取值
    let add_btn = document.querySelector("#in");
    let val = add_btn.value;
    val = parseInt(val);
    //2.+1
    val = val + 1;
    //3.写回
    add_btn.value = val;}

效果:
效果

1.2.5点击图片切换

我们想实现一个小案例,就是点击一个图片就能切换图片,再点击一次又能够切换回来,我们可以利用DOM来修改元素的属性来实现,在这个案例中,我们只需设置点击事件为修改图片的路径,也就是src属性,就可以实现图片的切换。

假设第一张图片的路径是./jee.png,第二张图片的路径是./樱花.png,实现图片切换的基本思路为:

  1. 获取img元素。
  2. 设置onclick。
  3. 点击事件的细节就是判断路径是否包含ee,包含就将src属性换成./樱花.png,反过来,判断路径是否包含樱花,包含就将src属性换成./jee.png
  4. 可以使用indexOf方法判断是否包含某个字符串。

JavaScript代码:

let img = document.querySelector("img");img.onclick = function() {
    console.log(img.src);
    if (img.src.indexOf("ee") >= 0) {
        img.src = './樱花.png';
    } else if (img.src.indexOf("樱花")) {
        img.src = './jee.png'
    }}

页面代码:

    
    @@##@@

    

效果:
JavaScript DOM API知识串讲
具体哪些属性可以修改,我们可以使用console.dir函数来获取某个元素DOM API能够操作的全部属性。

1.2.6暂停/播放切换

实现一个按钮,点击之后按钮文字从"播放"变为"暂停",再点击一次,按钮文字从"暂停"变为"播放"。

实现逻辑和切换逻辑是差不多的,具体看代码吧:

JavaScript代码:

let play = document.querySelector("#play");play.onclick = function(){
    if (play.value == "播放") {
        play.value = "暂停";
    } else if (play.value = "暂停") {
        play.value = "播放";
    }}

页面代码:

    

实现效果:

js11

1.2.7全选/取消全选

首先我们需要创建若干个复选框,只有一个全选框,我们选中全选框,其他元素需要被全部选中,一旦其他元素有未选中的,全选也必须是未选中的。

实现的基本思路:

Html 基础知识串讲
Html 基础知识串讲

Html 基础知识串讲

下载
  1. 获取全选框元素,获取其他元素。
  2. 注册全选框的点击事件,检查其他框是否都被选中,如果选中,则全选框也选中,否则全选框不选中。
  3. 对每一个其他复选框设置点击事件,并将状态与全选复选框关联。
  4. 每次点击其他框都要检测其他框是否都选中,以确定全选框的状态。

JavaScript代码:

let all = document.querySelector("#all");let gameroles = document.querySelectorAll(".gamerole");//checked属性为checked表示选中状态,为空字符串表示未选中//设置all的点击事件all.onclick = function() {
    for (let i = 0; i < gameroles.length; i++) {
        //使gameroles元素状态与all相同
        gameroles[i].checked = all.checked;
    }}//为gameroles的每个成员注册点击事件,并状态确定all的状态for (let i = 0; i < gameroles.length; i++) {
    gameroles[i].onclick = function() {
        all.checked = checkRole();
    }}//检查所有成员是否选中,确定all的状态function checkRole() {
    for (let i = 0; i < gameroles.length; i++) {
        //只要有一个成员未选中,all状态就是未选中
        if (gameroles[i].checked == '') {
            return '';
        }
    }
    return "checked";}

页面代码:

    全选 
胡桃
可莉
万叶
心海
锅巴

实际效果:

12

1.2.8点击文字放大

DOM还可以修改style属性,下面来尝试运用选中元素与修改元素的知识,来实现点击文字放大的一个小案例。

因为CSS中不区分大小写,属性与变量的命名采用脊柱式命名,而JS中-不能用于变量的命名,为了能够将CSS属性与JS变量名匹配,JS使用驼峰的形式表示CSS的属性,例如font-size属性,对应JS的变量名为fontSize

对于文字的放大,我们可以给文本所在的标签注册一个点击事件,每点击一次就将字体大小增大,即修改CSS的font-size属性。

JavaScript代码:

let p = document.querySelector("p");p.onclick = function() {
    //1.获取文字大小属性
    let wordsSize = parseInt(p.style.fontSize);
    console.log("修改前" + wordsSize);
    //2.修改文字大小
    wordsSize += 5;
    //3.写回到属性
    p.style.fontSize = wordsSize + "px";
    console.log("修改后" + wordsSize);}

页面代码:

    

我是一段文本

实现效果:
13

1.2.9实现关灯/开灯(夜间/白间模式切换)

很多情况下一个个修改样式属性太麻烦了,我们也可以直接修改类属性来达到效果,可以通过选中元素变量名.className来获取和修改类属性。

由于JavaScript里面的class是一个关键字,因此获取元素的class不能使用class,而需要使用className,多个class属性可以使用classList

JavaScript代码:

let p = document.querySelector('p');let button = document.querySelector('button');button.onclick = function(){
    if (p.className == "light") {
        p.className = 'black';
        button.innerHTML = '开灯';
    } else if (p.className == 'black') {
        p.className = 'light';
        button.innerHTML = '关灯';
    }}

页面代码:

    
    

我是一段文本

实际效果:
14

1.3操作页面结点

1.3.1新增结点

除了修改元素的属性和内容,我们还可以在页面上添加元素,要添加元素,那就得先新建一个元素,并且还需要依赖一个父元素(已经创建好的),把这个新建的元素插入到父元素中就能实现元素的添加(依赖与DOM树),这个操作也被称为新增页面结点。
新建元素:

let newp = document.createElement("元素标签");

补充元素内容:

newp.属性 = 值;

插入到DOM树:

选中的父元素.appendChild(创建的子元素);

实例:
JavaScript代码:

let cnt = 1;let add = document.querySelector("#add");let parent = document.querySelector("#container");add.onclick = function() {
    let newp = document.createElement("p");
    newp.id = "newp" + cnt;
    newp.className = cnt;
    newp.innerHTML = "hello";
    parent.appendChild(newp);
    console.log(newp);
    cnt++;}

页面代码:

    

实际效果:

15

1.3.2删除结点

删除结点就更容易了,在DOM树上删除结点就行。

删除结点:

获取到的父元素.removeChild(需要删除的子元素);

实例:
JavaScript代码:

let cnt = 1;let add = document.querySelector("#add");let parent = document.querySelector("#container");let arr = [];add.onclick = function() {
    let newp = document.createElement("p");
    arr[cnt-1] = newp;
    newp.id = "newp" + cnt;
    newp.className = cnt;
    newp.innerHTML = "hello";
    parent.appendChild(newp);
    console.log(newp);
    cnt++;}let del = document.querySelector("#del");del.onclick = function() {
    cnt--;
    if (cnt > 0) {
        console.log( "成功删除一个元素");
        parent.removeChild(arr[cnt-1]);
    } else {
        console.log( "该父元素已经没有元素可以删除了");
        cnt++;
    }}

页面代码:

    

实际效果:
16

2.综合案例

2.1猜数字

目标页面


17


猜数字的逻辑我就不赘述了,不过里面需要取随机数,我们可以通过js中的Math.random()函数来获取随机数,该函数生成随机数的范围是[0,1)区间内的一个小数,我们需要的是[1,100]之间的整数,我们可以乘上100后向下取整加一就能得到目标区间的数了,实现向下取整的函数是Math.floor(数字)

然后前端页面部分是通过HTML加上CSS弹性布局实现的,交互通过JavaScript DOM实现,下面的表白墙案例也是一样的,就不多说了。

JavaScript代码:

//获取元素let input = document.querySelector("#guess");let ret = document.querySelector("#result");let cnt = document.querySelector("#count");let guessBtn = document.querySelector("#b1");let flash = document.querySelector("#b2");//生成1-100的随机数//floor表示只取浮点数整数部分let ansNumber = Math.floor(Math.random() * 100) + 1;//实现按钮猜数字的点击事件guessBtn.onclick = function(){
    //输入框没有值,表示用户没有输入,不处理
    if(input.value == '') {
        return;
    }
    let guessNumber = parseInt(input.value);
    if (guessNumber > ansNumber) {
        ret.innerHTML = "YO!猜大了!";
        ret.style.color = "red";
    } else if (guessNumber < ansNumber) {
        ret.innerHTML = "YO!猜小了!";
        ret.style.color = "red";
    } else {
        ret.innerHTML = "Bingo!猜对了!";
        ret.style.color = "green";
    }
    if (ret.innerHTML != "Bingo!猜对了!") {
        let guessCount = parseInt(cnt.innerHTML) + 1;
        cnt.innerHTML = guessCount;
    }}//点击flash按钮刷新页面,重置游戏、flash.onclick = function() {
    location.reload();}

页面代码:


    
    
    
    猜数字

    

    

猜数字游戏

要猜的数字:

结果: 你还没有猜哦!

次数: 0

实际效果:
2.1

2.2表白墙

目标页面


表白墙


JavaScript代码:

//获取元素let loveBtn = document.querySelector("#submit");let adv = ["深情地", "温柔地", "随便地", "紧张地", "幽默地", "滑稽地", "开心地", ""];//用户点击表白将表白记录显示在表白按钮下面let record = [];let i = 0;loveBtn.onclick = function() {
    //1.获取表白内容
    let inputs = document.querySelectorAll("input");
    let from = inputs[0].value;
    let to = inputs[1].value;
    let message = inputs[2].value;
    //2.如果有一项内天为空,不处理
    if (from == '' || to == '' || message == '') {
        return;
    }
    //3.汇总表白语言
    let n = adv.length;
    let index = (Math.floor(Math.random() * 1000) + 1) % n;
    let romAdv = adv[index];
    let loveMess = from + romAdv + "对" + to + "说" + message;
    record[i] = "留言" + (i+1) + ":" + loveMess;
    //4.新建结点,插入表白记录
    let p = document.createElement("p");
    p.innerHTML = record[i];
    p.className = 'oh';
    let container = document.querySelector(".container");
    container.appendChild(p);
    i++;
    //5.表白完,清空输入框
    for (let i = 0; i < inputs.length; i++) {
        inputs[i].value = '';
    }}

页面代码:


    
    
    
    表白墙
    
    

"真的是"表白墙

输入后点击提交, 会将信息显示在表白按钮下方

这是一个正经的表白墙,这真的不是一个表白墙

是谁:

向谁:

说:

实际效果:

2.2

【相关推荐:javascript视频教程web前端

表白墙

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

832

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

738

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

734

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

398

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.6万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号