前端三剑客 —— 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>

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

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

相关文章

Linux登录访问限制

Linux系统下&#xff0c;用户密码的有效期可以通过编辑/etc/login.defs文件控制&#xff1b;密码复杂度规则设定需要通过/etc/pam.d/system-auth文件控制&#xff1b;登录失败次数限制通常由/etc/pam.d/login文件限制&#xff0c;可使用pam_tally2模块进行设置。 Linux系统下的…

爬虫 | 网易新闻热点数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目是一个简单的网络爬虫&#xff0c;用于从网易新闻的热点新闻列表中提取标题和对应的链接&#xff0c;并将提取到的数据保存到一个 CSV 文件中。 目录 一、技术栈 二、功能说明 三、注意事项 四、代码解析 1. 导入所需…

Playwright安装和基本使用(ui/web自动化)

1.简介 Playwright是2021年微软开源的一个项目「playwright-python」。针对 Python 语言的纯自动化工具&#xff0c;它可以通过单个API自动执行 Chromium&#xff0c;Firefox 和 WebKit 浏览器&#xff0c;同时支持以无头模式、有头模式运行。 Playwright&#xff08;Git&…

springboot汽车企业公司网站的系统设计ssm-java

框架&#xff1a;SSM/springboot都有 jdk版本&#xff1a;1.8 及以上 ide工具&#xff1a;IDEA 或者eclipse 数据库: mysql 编程语言: java 前端&#xff1a;layuibootstrapjsp 详细技术&#xff1a;HTMLCSSJSjspspringmvcmybatisMYSQLMAVENtomcat 开发工具 IntelliJ IDEA: 一…

【学习】软件测试人员使用Loadrunner进行性能测试的优势

在软件测试领域&#xff0c;性能测试是一项至关重要的环节&#xff0c;它关乎到软件系统的稳定性和用户体验。而在这其中&#xff0c;Loadrunner作为一款久经考验的性能测试工具&#xff0c;凭借其独特的优势&#xff0c;成为了众多企业和开发者眼中的“得力助手”。 首先&…

1036: 寻找整数序列的主元素

解法&#xff1a; #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {int n;cin >> n;vector<int> arr(n);vector<int> tong(1000);for (auto& x : arr) {cin >> x;tong[x];}int pma…

Guava里一些比较常用的工具

随着java版本的更新提供了越来越多的语法和工具来简化日常开发&#xff0c;但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法&#xff0c;solar框架就依赖了guava的16.0.1版本&#xff0c;这里稍微介绍下。 一、集合工具类…

vue3 uniapp微信登录

根据最新的微信小程序官方的规定&#xff0c;uniapp中的uni.getUserInfo方法不再返回用户头像和昵称、以及手机号 首先&#xff0c;需获取appID&#xff0c;appSecret&#xff0c;如下图 先调用uni.getUserInfo方法获取code&#xff0c;然后调用后台的api&#xff0c;传入code&…

大模型项目整体规划、技术选型和案例分析经验分享

1 项目整体规划 1.1 明确场景 toB or toC&#xff08;面向企业还是面向消费者&#xff09; toB&#xff08;面向企业&#xff09;&#xff1a;指的是产品或服务主要面向其他企业或组织。这类产品通常需要解决特定的商业问题&#xff0c;强调效率和集成性&#xff0c;并且可能需…

什么是 MVVM、mvc 模型

mvc模型 MVC: MVC 即 model-view-controller&#xff08;模型-视图-控制器)是项目的一种分层架构思想&#xff0c;它把复杂的业务逻辑&#xff0c; 抽离为职能单一的小模块&#xff0c;每个模块看似相互独立&#xff0c;其实又各自有相互依赖关系。它的好处是&#xff1a;保证了…

如何选择最好的数据恢复软件?最佳免费数据恢复软件集

丢失或删除文件并不意味着它已从您的设备中永久删除。 下次您不小心删除或丢失文件时&#xff0c;请不要惊慌&#xff0c;丢失的文件仍然可以恢复&#xff0c;但前提是您迅速采取行动。 驱动器具有用于存储文件的目录。删除数据需要很长时间&#xff0c;因此您删除的任何文件都…

BetterZip解锁文件处理新境界

在数字化时代的浪潮中&#xff0c;文件处理成为了我们日常生活和工作中不可或缺的一部分。压缩软件&#xff0c;作为文件处理的得力助手&#xff0c;以其出色的压缩性能、便捷的操作体验以及强大的文件管理能力&#xff0c;赢得了广大用户的青睐。在众多压缩软件中&#xff0c;…

热词解析| 制造企业如何跟上新质生产力建设步伐【触想智能】

回顾3月份的网络热词&#xff0c;「新质生产力」在各大平台霸榜刷屏&#xff0c;并且受到两会政府工作报告的频繁聚焦。究竟何为新质生产力?以及&#xff0c;传统制造企业如何加速融入这场火热的现代化产业革新浪潮之中? 图源| 纪录片《加快形成新质生产力》 1、什么是新质生…

AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4

原文:AutoGen - Build Powerful AI Agents with ChatGPT/GPT-4 | MLExpert - Crush Your Machine Learning interview In this tutorial, well explore AutoGen1, a Microsoft library that lets you create LLM applications with agents. These agents can communicate and …

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

数据库(3)

目录 11.那你知道什么是覆盖索引和回表吗&#xff1f; 12.什么是MVCC&#xff1f;说说MySQL实现MVCC的原理&#xff1f; 13.MySQL的锁的类型有哪些呢&#xff1f; 14.你们数据量级多大&#xff1f;分库分表是怎么做的&#xff1f; 15.分表后非分库字段sharding_key的查询怎…

C语言学习笔记之结构体(一)

目录 什么是结构体&#xff1f; 结构体的声明 结构体变量的定义和初始化 结构体成员的访问 结构体传参 什么是结构体&#xff1f; 在现实生活中的很多事物无法用单一类型的变量就能描述清楚&#xff0c;如&#xff1a;描述一个学生&#xff0c;需要姓名&#xff0c;年龄&a…

复旦新出!大规模语言模型:从理论到实践,书籍PDF分享

自2018年以来&#xff0c;包含Google、OpenAI、Meta、百度、华为等公司和研究机构都纷纷发布了包括BERT&#xff0c; GPT等在内多种模型&#xff0c;并在几乎所有自然语言处理任务中都表现出色。 今天给大家推荐一本大模型方面的书籍<大规模语言模型&#xff1a;从理论到实…

jupyter切换不同的内核(虚拟环境)(anaconda 24.1.2)

jupyter切换不同的内核&#xff08;anaconda 24.1.2&#xff09; 主要的两条命令&#xff1a; conda install ipykernel python -m ipykernel install --user --name 环境名称 anaconda的版本号 conda --version实例&#xff1a; 一、首先可以看到已经创…

【Linux】进程学习① (进程的PCB(task_struct)进程的标识符详解进程的创建fork函数)

目录 ​编辑 1.进程的概念 1.1进程的描述与组织&#xff1a;进程的PCB 进程&#xff1a;进程是 内核pcb对象可执行程序/内核数据结构可执行程序进程 1.3 task_struct 2.PCB内部属性 3 查看进程 4.获取进程标识符&#xff1a;getpid函数&#xff08;4-6主要围绕进程的标识符展开…