前端三剑客 —— JavaScript (第六节)

目录

内容回顾

BOM编程

DOM编程*

document对象

document对象的属性

document对象的方法

DOM对象节点

操作DOM对象内容

操作DOM对象的属性

--- DOM对象.属性名称

--- DOM对象[属性名称]

--- 调用系统API (Application Program interface),例如getAttribute()、setAttribute()

操作DOM对象的样式

综合案例:抽奖

案例代码

案例-星星点灯

功能实现:

案例-全选和反选

功能实现:


内容回顾

BOM编程

        window对象

        history对象

        go(n):n是一个数字,如果是正数表示前进几页,如果是负数表示后退几页

        back():后一页

        forward():前进一页

        screen对象

        navigator对象

        location对象

        href:获取地址栏信息

        host:获取主机名+端口号

        hostname:获取主机名

        port:端口号

        search:获取查询参数

DOM编程*

DOM是Document Object Model,文档对象模型,它是我HTML页面对象,它包含属性和方法。

document对象

document对象的属性

document对象的方法

方法

描述

close()

关闭用 document.open() 方法打开的输出流,并显示选定的数据。

getElementById()

返回对拥有指定 id 的第一个对象的引用。

getElementsByClassName()

返回class属性指定的对象集合

getElementsByName()

返回带有指定名称的对象集合。

getElementsByTagName()

返回带有指定标签名的对象集合。

document.querySelector()

返回文档中匹配指定的CSS选择器的第一元素

document.querySelectorAll()

document.querySelectorAll() 是 HTML5中引入的新方法,返回文档中匹配的CSS选择器的所有元素节点列表

open()

打开一个流,以收集来自任何 document.write() 或 document.writeln() 方法的输出。

write()]

向文档写 HTML 表达式 或 JavaScript 代码。

writeln()

等同于 write() 方法,不同的是在每个表达式之后写一个换行符。

document.activeElement

返回当前获取焦点元素

document.addEventListener()

向文档添加监听事件

document.createAttribute()

创建一个属性节点

document.createComment()

createComment() 方法可创建注释节点。

document.createElement()

创建元素节点。

document.createTextNode()

创建文本节点。

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>document对象的方法</title>

</head>

<body>

<pre>

| getElementById()            | 返回对拥有指定 id 的第一个对象的引用。                       |

| --------------------------- | ------------------------------------------------------------ |

| getElementsByClassName()    | 返回class属性指定的对象集合                                  |

| getElementsByName()         | 返回带有指定名称的对象集合。                                 |

| getElementsByTagName()      | 返回带有指定标签名的对象集合。                               |

| document.querySelector()    | 返回文档中匹配指定的CSS选择器的第一元素                      |

| document.querySelectorAll() | 返回文档中匹配的CSS选择器的所有元素节点列表                  |

</pre>

<div id="box">返回对拥有指定 id 的第一个对象的引用</div>

<div class="login">返回class属性指定的对象集合</div>

<p>

    <input type="text" class="login" name="username" value="返回带有指定名称的对象集合"><br>

    <input type="password" class="login" name="password" placeholder="返回带有指定标签名的对象集合">

    <input type="text">

</p>

<script>

    // 1. getElementById(),用于获取页面中指定 id 属性的元素

    let box = document.getElementById('box')

    console.log(box.innerHTML)  // innerHTML是获取对象的内容

    box.innerHTML = '这是我改后的内容'  // 修改对象的内容

    // 2. getElementsByClassName(),获取指定类样式的所有元素

    let logins = document.getElementsByClassName('login')

    console.log(logins.length);

    // 3. getElementsByName(),根据指定的名称来获取元素

    let usernames = document.getElementsByName('username')

    console.log(usernames[0].value);    // 获取值

    usernames[0].value = '张三'           // 修改表单元素的值

    // 4. getElementsByTagName(),获取指定的标签元素

    let inputs = document.getElementsByTagName('input')

    console.log(inputs.length)

    // 5. document.querySelector(),它可以通过id、类样式、标签等来进行获取(所有的 CSS 选择器都可以使用)

    let box1 = document.querySelector('#box')  // 使用 id 选择器来获取元素,这种方式获取时,要带 #

    console.log(box1.innerHTML)

    let loginObj = document.querySelector('.login')  // 使用类选择器来获取元素

    console.log(loginObj.innerHTML)

    let input = document.querySelector('input')   // 使用标签选择器来获取元素

    console.log(input.value)

    // 总结:使用 querySelector() 只能获取页面的第一个匹配的元素

    // 6. document.querySelectorAll(),它获取所有

    let loginClasses = document.querySelectorAll('.login')

    console.log(loginClasses.length)

</script>

</body>

</html>

DOM对象节点

节点node可以分为元素节点、属性节点和文本节点,而这些节点可以又有三个非常有用的属性,分别为nodeName、nodeTyep和nodevalue

节点的层次结构可以划分为:父节点与子节点、兄弟节点这两种。当我们获取其中一个元素节点的时候,就可以使用层次节点属性来获取它相关层次的节点。

属性|方法

说明

childNodes

获取当前元素节点的所有子节点

firstChild

获取当前元素节点的第一个子节点

lastChild

获取当前元素节点的最后一个子节点

ownerDocument

获取该节点的文档根节点,相当于 document

parentNode

获取当前节点的父节点

previousSibling

获取当前节点的前一个同级节点

nextSibling

获取当前节点的后一个同级节点

attributes

获取当前元素节点的所有属性节点集合

removeChild()

删除指定节点

cloneNode()

复制节点

repalceChild()

可以把节点替换成指定的节点,注意父节点操作的

insertBefore()

可以把节点创建到指定节点的前面

appendChild()

将一个新节点添加到某个节点的子节点列表的末尾上

createElement()

创建新节点

write()

任意字符串插入到文档中去

操作DOM对象内容

在DOM中,我们获取DOM对象的内容有以下几种方式:

innerText、innerHTML、textContent

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>操作DOM对象的内容</title>

</head>

<body>

<div id="show">

    <p>这是p标签</p>

</div>

<div id="box"></div>

<script>

    window.onload = function () {

        // 1. 获取DOM对象

        let box = document.querySelector('#box')

        // 设置值

        //box.innerHTML = '<h2>这是内容</h2>'    // 显示时会解析 html 标签

        //box.innerText = '<h2>这是内容</h2>'     // 显示时原样输出,非标准的(W3C

        box.textContent = '<h2>这是内容</h2>'       // 显示时原样输出,是标准的(W3C

        // 获取值

        let show = document.querySelector('#show')

        console.log(show.innerHTML)

        console.log(show.innerText)

        console.log(show.textContent)

    }

</script>

</body>

</html>

操作DOM对象的属性

常见的DOM对象属性操作有以下三种:

--- DOM对象.属性名称
--- DOM对象[属性名称]
--- 调用系统API (Application Program interface),例如getAttribute()、setAttribute()

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>操作DOM对象的属性</title>

    <style>

        .show, .show2 {

            width: 120px;

            height: 120px;

            background: #317FE5;

            color: white;

            text-align: center;

            line-height: 120px;

        }

        .show2 {

            background: #243A64;

        }

    </style>

</head>

<body>

<div id="msg" title="这是标题" class="show">这是一个div</div>

<button onclick="change()">点击替换背景颜色</button><br>

<input id="box" type="text">

<script>

    function change() {

        // 1. 获取要改变背景颜色的对象

        let msg = document.querySelector('#msg')

        // 修改对象的 title 属性

        msg.title = '这是修改后的标题'

        /*if (msg.className === 'show') {

            msg.className = 'show2'

        } else {

            msg.className = 'show'

        }*/

        if (msg.getAttribute('class') === 'show') {

            msg.setAttribute('class', 'show2')

        } else {

            msg.setAttribute('class', 'show')

        }

    }

    // 1. 我们对idbox的对象进行属性操作

    //document.querySelector('#box').value = 10       // DOM对象.属性名称

    //document.querySelector('#box')["value"] = 20    // DOM对象[属性名称]

    document.querySelector('#box').setAttribute('value', '100') // 调用API

</script>

</body>

</html>

操作DOM对象的样式

对于DOM对象来说,获取样式的结果有两种:

--- 有单位的

行内样式:标签对象.style.样式名称

getComputeStyle(标签对象).样式名称

标签对象.currentStyle.样式名称

--- 无单位的

offsetWidth

offsetHeight

offsetTop

offsetLeft

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>操作DOM对象的样式</title>

    <style>

        #box {

            height: 300px;

            border: 1px solid #317FE5;

        }

    </style>

</head>

<body>

<div style="width: 300px;/* height: 200px;*/" id="box" onclick="scale()">这是一个div</div>

<script>

    // 1. 获取对象

    let box = document.querySelector('#box')

    // 1.1 行内样式:标签对象.style.样式名称

    console.log(box.style.width)  // 300px

    console.log(box.style.height) // 没有获取到,因为行内样式中没有 height 样式名

    // 1.2 getComputedStyle(标签对象).样式名称

    console.log(getComputedStyle(box).width)  // 300px

    console.log(getComputedStyle(box).height) // 300px

    function scale() {

        /*

        let h = getComputedStyle(box).height

        let w = getComputedStyle(box).width

        //console.log(w, h)

        box.style.height = parseInt(h) - 100 + 'px'

        box.style.width = parseInt(w) - 100 + 'px'

        */

        // 只获取行内样式的宽和高

        console.log(box.offsetWidth, box.offsetHeight)

        console.log(box.clientWidth, box.clientHeight)

        box.style.width = box.clientWidth - 100 + 'px'

        box.style.height = box.clientHeight - 100 + 'px'

    }

</script>

</body>

</html>

综合案例:抽奖

案例效果:

案例代码

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>综合案例:抽奖</title>

    <style>

        * {

            padding: 0;

            margin: 0;

        }

        .container {

            width: 800px;

            height: 800px;

            border: 1px solid #317FE5;

            margin: 0 auto;

            text-align: center;

            line-height: 100px;

        }

        .container .box, .box2 {

            width: 300px;

            height: 300px;

            background: blueviolet;

            margin: 50px auto 0;

            border-radius: 50%;

            line-height: 300px;

        }

        .box2 {

            background: #8B0000;

        }

        #show {

            font-size: 30px;

            color: white;

            font-weight: bold;

        }

        #start {

            width: 300px;

            height: 50px;

            background: #317FE5;

            color: white;

            outline: none;

            border: none;

            border-radius: 5px;

            cursor: pointer;

        }

    </style>

</head>

<body>

<div class="container">

    <div class="box" id="box">

        <span id="show">

            奖品

        </span>

    </div>

    <button id="start" onclick="start()">开始抽奖</button>

</div>

<script>

    // 1. 定义抽奖的商品

    let goods = ['香蕉', '橘子', '谢谢参与', '电脑', '手机', '代金券', '项链', '谢谢参与']

    // 2. 获取对象

    let show = document.querySelector('#show') // 奖品

    let _start = document.querySelector('#start') // 按钮

    let box = document.querySelector('#box') // 容器

    // 定义一个句柄

    let timer

    // 定义一个标识

    let flag = false

    function start() {

        if (!flag) {

            flag = true

            _start.innerHTML = '停止抽奖'

            timer = setInterval(function () {

                // 生成一个随机下标值,它的范围在 [0 ~ goods数组元素个数之间)

                let index = Math.floor(Math.random() * goods.length)

                //console.log(index)

                // 通过随机下标从数组中获取商品

                let good = goods[index]

                // 把商品显示出来

                show.textContent = good

                // 修改box的样式

                box.className = 'box2'

            }, 10)

        } else {

            flag = false

            _start.innerHTML = '开始抽奖'

            clearInterval(timer)   // 清除定时器

            box.className = 'box'

        }

    }

</script>

</body>

</html>

案例-星星点灯

效果图:

功能实现:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>星星点灯-案例</title>

    <style>

        img1111 {

            width: 20px;

            height: 20px;

        }

    </style>

</head>

<body style="background: #000000">

<script>

    // 页面加载完成后要执行的函数

    window.onload = function () {

        // 点击页面时执行的函数

        document.onclick = function (e) {

            // 获取鼠标点击的x坐标

            let x = e.pageX

            // 获取鼠标点击的y坐标

            let y = e.pageY

            //console.log(x, y)

            // 使用 document.createElement() 方法来创建节点

            let image = document.createElement('img')

            image.src = './images/star.png'

            // 给图片定位

            image.style.position = 'absolute'       // 采用绝对定位

            // 设置图片的坐标

            let w = getRandom(10, 50)

            let h = getRandom(10, 50)

            // 设置图片的宽度

            image.style.width = w + 'px'

            image.style.top = (y - (h / 2)) + 'px'

            image.style.left = (x - (w / 2)) + 'px'

            // 将创建的节点添加到文档中

            document.body.appendChild(image)

        }

    }

    // 定义一个用于获取随机数的函数

    function getRandom(min, max) {

        return parseInt(Math.random() * (max - min + 1)) + min

    }

</script>

</body>

</html>

案例-全选和反选

运行效果:

功能实现:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>全选和反选-案例</title>

    <style>

        * {

            padding: 0;

            margin: 0;

        }

        ul {

            list-style: none;

            margin-left: 20px;

        }

        ul li {

            height: 30px;

        }

        .all {

            margin: 20px;

        }

        button {

            width: 80px;

            height: 30px;

            margin-left: 20px;

        }

    </style>

</head>

<body>

<h3>你的爱好是:</h3>

<input type="checkbox" class="all" onclick="change(this)">全选 <br>

<ul>

    <li><input type="checkbox" class="all_check"> 看小说</li>

    <li><input type="checkbox" class="all_check"> 看电影</li>

    <li><input type="checkbox" class="all_check"> 玩游戏</li>

    <li><input type="checkbox" class="all_check"> 聊微信</li>

    <li><input type="checkbox" class="all_check"> 刷抖音</li>

    <li><input type="checkbox" class="all_check"> 码代码</li>

</ul>

<button onclick="reverse()">反选</button>

<script>

    // 全选或取消

    function change(node) {

        //let all_checks = document.querySelectorAll('.all_check')

        /*

        for (let i = 0; i < all_checks.length; i++) {

            if (node.checked) {

                all_checks[i].checked = true

            } else {

                all_checks[i].checked = false

            }

        }*/

        /*

        for (let i = 0; i < all_checks.length; i++) {

            all_checks[i].checked = node.checked

        }*/

        // 采用箭头函数的方式来编写

        //all_checks.forEach(all_check => all_check.checked = node.checked)

        document.querySelectorAll('.all_check').forEach(all_check => all_check.checked = node.checked)

    }

    // 反选

    function reverse() {

        //let all_checks = document.querySelectorAll('.all_check')

        /*

        for (let i = 0; i < all_checks.length; i++) {

            all_checks[i].checked = !all_checks[i].checked

        }*/

        //all_checks.forEach(all_check => all_check.checked = !all_check.checked)

        document.querySelectorAll('.all_check').forEach(all_check => all_check.checked = !all_check.checked)

    }

</script>

</body>

</html>

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

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

相关文章

汇编语言知识点整理(应付考试专用,想学习找其他的)

1 基础知识 1.1 信息在计算机内部的表示和存储 1.1.1 信息存储的基本概念 信息在计算机内部是以二进制数据的形式在存储器中存取的。介绍两个基本概念&#xff1a; 位&#xff08;Bit&#xff09; 计算机中最小的数据单位&#xff0c;一位有0、1两状态。Bit是计算机中最小…

对常见FTP客户端/服务器的调查与分析

前言 主要是想看看常见的服务器和客户端是如何实现协议中要求的功能的&#xff0c;。 比如RF959要求的记录结构&#xff08;Record Structure&#xff09;、页结构&#xff08;Page Structure&#xff09;、Block Mode、Compress Mode&#xff0c;看起来就很抽象。 实测发现…

【算法】回溯:与递归,dfs的同质与分别,剪枝与恢复现场的详细理解,n皇后的回溯解法及算法复杂度分析。

目录 ​编辑 1.什么是回溯 2.关于剪枝 3.关于恢复现场 4.题目&#xff1a;二叉树的所有路径&#xff08;凸显恢复现场&#xff1a;切实感受回溯与深搜&#xff09; 问题分析 ①函数设置为&#xff1a;void Dfs(root) ②函数设置为&#xff1a;void Dfs(root,path) 解题思想&…

Day101:漏洞发现-漏扫项目篇NucleiYakitGobyAfrogXrayAwvs联动中转被动

目录 特征类-三方Poc调用&模版Poc调用 案例1&#xff1a;单点对某特征点进行安全评估 Goby-综合类 Nuclei-较综合类 Afrog-特征类 Yakit-可特征可综合 案例2&#xff1a;新型对某特征点进行安全评估 综合类-主动漏扫&中转联动&被动联动 案例1&#xff1a;…

给自己的机器人部件安装单目摄像头并实现gazebo仿真功能

手术执行器添加摄像头 手术执行器文件夹surgical_new内容展示如何添加单目摄像头下载现成的机器人环境文件启动仿真环境 手术执行器文件夹surgical_new内容展示 进入src文件夹下选择进入vision_obliquity文件夹 选择launch 有两个可用gazebo中rviz展示的launch文件&#xff0…

当我们使用git 上传码云的时候报错:Push rejected Push to origin/master was rejected

在我们推送成果去git&#xff08;码云&#xff09;的过程中报错&#xff1a;Push rejected Push to origin/master was rejected 这个问题是我们在推的时候被拒绝了 控制台报错&#xff1a; 18:46:19.665: [zengqingqingandluoxuwen] git -c credential.helper -c core.quote…

软件无线电安全之GNU Radio基础 -上

GNU Radio介绍 GNU Radio是一款开源的软件工具集&#xff0c;专注于软件定义无线电&#xff08;SDR&#xff09;系统的设计和实现。该工具集支持多种SDR硬件平台&#xff0c;包括USRP、HackRF One和RTL-SDR等。用户可以通过GNU Radio Companion构建流程图&#xff0c;使用不同…

嵌入式学习54-ARM3(中断和时钟)

知识零碎&#xff1a; import &#xff0c;定义表示这是一个外部变量的标号&#xff0c;不是在本程序定义的 export &#xff0c;表示本程序里面用到的变量提供给 其他模块 调用的。 按键模块中&#xff0c;K1和K6所连接的高电阻&#xff0c;根据外部变化变化 …

HiveQL练习(hive3.x)

零、准备工作 1. Hive环境安装 参见搭建Hive 3.x环境&#xff08;CentOS 9 Hadoop3.x&#xff09; 2. 准备数据 在虚拟机HOME目录创建如下文件内容&#xff1a; cd /root vi emp.csv内容如下&#xff1a; 7369,SMITH,CLERK,7902,1980/12/17,800,,20 7499,ALLEN,SALESMAN…

SpringMVC--获取请求参数 / 域对象共享数据

目录 1. SpringMVC 获取请求参数 1.1. 通过ServletAPI获取 1.2. 控制器方法形参获取 1.3. RequestParam 1.4. RequestHeader 1.5. CookieValue 1.6. 通过POJO获取请求参数 1.7. 解决获取请求参数的乱码问题 2. 域对象共享数据 2.1. 三大域对象 2.2. 准备工作 2.3. S…

8:系统开发基础--8.5:系统设计、8.6:系统测试 、8.7:软件维护 、8.8:软件质量保证、8.9:软件文档

转上一节&#xff1a; http://t.csdnimg.cn/X0GjWhttp://t.csdnimg.cn/X0GjW 8.5&#xff1a;系统设计 考点1&#xff1a;系统设计概述 1&#xff1a;软件设计的任务与活动 体系结构设计&#xff1a;定义软件系统各主要部件之间的关系。 数据设计&#xff1a;基于E-R图确定…

免费的 ChatGPT 网站(六个)

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、insCode二、讯飞星火三、豆包四、文心一言五、通义千问六、360智脑 现在智能…

专题十三、预处理器

预处理器 1. 预处理器的工作原理2. 预处理指令3. 宏定义3.1 简单的宏3.2 带参数的宏3.3 # 运算符3.4 ## 运算符3.5 宏的通用属性3.6 宏定义中的圆括号3.7 创建较长的宏3.8 预定义宏3.9 C99 中新增的预定义宏3.10 空的宏参数3.11 参数个数可变的宏3.12 __func__ 标识符 4. 条件编…

Leetcode 416.分割等和子集

题目 思路 使用0-1背包的思路。 之前0-1背包是说有N个物品&#xff0c;一个最大承重重量为W的背包。每个物品都有各自的重量和value,要让放入背包中物品价值总和最大。 这道题如何对应成0-1背包&#xff0c;看下面的分析。 背包的大小&#xff1a;要想两个子集元素和相等&am…

宝塔面板Docker+Uwsgi+Nginx+SSL部署Django项目

这次为大家带来的是从零开始搭建一个django项目并将它部署到linux服务器上。大家可以按照我的步骤一步步操作&#xff0c;最终可以完成部署。 步骤1&#xff1a;在某个文件夹中创建一个django项目 安装django pip install django创建一个django项目将其命名为djangoProject …

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼

【板栗糖GIS】如何给微软拼音输入法加上小鹤双拼 用过在注册表里新建的方法&#xff0c;结果弄完没有出现小鹤双拼方案&#xff0c;想到了自己写reg表 目录 1. 新建一个txt文件 2. 把.txt的后缀名改成.reg&#xff0c;双击运行 3. 在设置中找到微软输入法-常规 1. 新建一个…

二分查找(函数法)

1.二分查找的前提 只有单调的序列才能进行二分查找&#xff1b; 一般为单调不减&#xff0c;单调不增需要像 sort() 一样修改比较函数&#xff1b; 2.binary_search( ) 函数 binary_search( ) 是算法库&#xff08;algorithm&#xff09;函数里面的&#xff0c;用于在一个已经…

【web网页制作】html+css旅游家乡山西主题网页制作(3页面)【附源码】

山西旅游网页目录 涉及知识写在前面一、网页主题二、网页效果Page1、景点介绍Page2、酒店精选|出行攻略Page3、景色欣赏 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 山西旅游主题网页制作&am…

【大语言模型】轻松本地部署Stable Diffusion

硬件要求&#xff1a; 配备至少8GB VRAM的GPU&#xff0c;如果你的电脑只有CPU&#xff0c;请看到最后。根据部署规模&#xff0c;需要足够的CPU和RAM。 软件要求&#xff1a; Python 3.7或更高版本。支持NVIDIA GPU的PyTorch。Hugging Face的Diffusers库。Hugging Face的Tr…

Training - PyTorch Lightning 分布式训练的 global_step 参数 (accumulate_grad_batches)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/137640653 在 PyTorch Lightning 中&#xff0c;pl.Trainer 的 accumulate_grad_batches 参数允许在执行反向传播和优化器步骤之前&…