前端三剑客 —— 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.rhkb.cn/news/309522.html

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

相关文章

行业模板|DataEase批发零售大屏模板推荐

DataEase开源数据可视化分析平台于2022年6月发布模板市场&#xff08;https://templates-de.fit2cloud.com&#xff09;&#xff0c;并于2024年1月新增适用于DataEase v2版本的模板分类。模板市场旨在为DataEase用户提供专业、美观、拿来即用的大屏模板&#xff0c;方便用户根据…

2024 年江苏省职业院校技能大赛“区块链技术应用” 赛项赛卷(样卷)运维题解析一

运维题 环境: ubuntu20 fisco 2.8.0 前言 准备两台机子,并且可以能相互pin通 192.168.19.133 [M1-A] 192.168.19.137 [M2-B] 子任务 1-2-1: 搭建区块链系统并验证 基于给定服务器环境以及软件,搭建一条双机 1 机构 8 节点 1 群组的区块 链系统(默认端口开始[30300,2020…

最优算法100例之43-包含min函数的栈

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数,在该栈中,调用min,push及pop的时间复杂…

idea 中运行spring boot 项目报 Command line is too long的解决办法。

Command line is too long 在这里选择edit configures 选择shrten command line , 选择 jar manifest 运行即可。

5G网络开通与调测ipv4

要求如下&#xff1a; 1. 勘站规划 1. 【重】首先观察NR频点&#xff0c;完成设备选型 2645--选择N41 3455--选择N78 4725--选择N79 设备选型如下&#xff1a;观察AAU的通道数&#xff0c;最大发射功率&#xff1b;选择N41的选型频段也要选41 2. …

04—常用方法和正则表达式

一、字符串 1.length 属性返回字符串的长度(字符数)。 2.在字符串中查找字符串 indexOf() 字符串使用 indexOf() 来定位字符串中某一个指定的字符首次出现的位置 如果没找到对应的字符函数返回-1 lastIndexOf() 方法在字符串末尾开始查找字符串出现的位置。 3.replace() 方…

WordPress 图片压缩插件:Compress JPEG PNG images 使用方法

插件介绍 Compress JPEG & PNG images是一款非常好用的图片压缩插件:&#xff0c;非常值得大家安装使用&#xff1b;特别是图片类型网站。其实我们很多服务器磁盘空间是不在乎多那么几十 MB 大小的&#xff0c;但是压缩了图片能提升网站速度&#xff0c;节省宽带&#xff…

计算机本科毕业,「就业」还是「读研」?

如果本科不错能找到较好的工作&#xff0c;建议直接工作&#xff0c;否则可以选择读研。 如果你本科毕业于一所顶尖学府&#xff0c;且技术实力雄厚&#xff0c;那么直接就业可能更为明智&#xff1b;对比而言读研可以为你提供更多的时间和机会去提升自己&#xff0c;尤其是在…

算法1: 素数个数统计

统计n以内的素数个数 素数&#xff1a;只能被1和自身整除的自然数&#xff0c;0和1除外&#xff1b; 举例&#xff1a; 输入&#xff1a;100 输出&#xff1a;25 import java.util.*; class Test1{public static void main(String[] args){int a 100; //输入数字//…

智慧矿山视频智能监控与安全监管方案

一、行业背景 随着全球能源需求的日益增长&#xff0c;矿业行业作为国民经济的重要支柱&#xff0c;其发展日益受到广泛关注。然而&#xff0c;传统矿山管理模式的局限性逐渐显现&#xff0c;如生产安全、人员监管、风险预警等方面的问题日益突出。因此&#xff0c;智慧矿山智…

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现WOA-BP鲸鱼算法优化BP神经网络多变量回归预测&#xff08;完整源码…

文献阅读:Viv:在 web 上多尺度可视化高分辨率多重生物成像数据

文献介绍 「文献题目」 Viv: multiscale visualization of high-resolution multiplexed bioimaging data on the web 「研究团队」 Nils Gehlenborg&#xff08;美国哈佛医学院&#xff09; 「发表时间」 2022-05-11 「发表期刊」 Nature Methods 「影响因子」 47.9 「DOI…

计算机网络—传输层UDP协议:原理、应用

​ &#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;2月のセプテンバー 1:21━━━━━━️&#x1f49f;──────── 5:21 &#x1f504; ◀️ ⏸ ▶️ ☰ &am…

RMT: Retentive Networks Meet Vision Transformers学习笔记

代码地址&#xff1a;GitHub - qhfan/RMT: (CVPR2024)RMT: Retentive Networks Meet Vision Transformer 论文地址&#xff1a;https://arxiv.org/pdf/2309.11523.pdf Transformer首次出现在自然语言处理领域&#xff0c;后来迁移到计算机视觉领域&#xff0c;在视觉任务中表现…

web3项目自动连接小狐狸以及小狐狸中的各种“地址”详解

刚做web3的时候&#xff0c;比较迷糊的就是人们口中说的各种地址&#xff0c;小狐狸钱包地址&#xff0c;私钥地址&#xff0c;跳转地址&#xff0c;接口地址&#xff0c;交易地址&#xff0c;等等XX地址&#xff0c;常常感觉跟做链的同事们说话不在一个频道。 这一小节&#x…

解锁生成式 AI 的力量:a16z 提供的 16 个企业指南

企业构建和采购生成式AI方面的16项改变 生成式 AI 领域趋势洞察&#xff1a;企业构建和采购生成式 AI 的方式正在发生重大转变&#xff0c;具体表现在&#xff1a;* 专注于可信度和安全性&#xff1a;75% 的企业将信任和安全性视为关键因素。* 优先考虑可扩展性和灵活性&#x…

YOLOv9/YOLOv8算法改进【NO.117】 使用Wasserstein Distance Loss改进小目标的检测效果

前 言 YOLO算法改进系列出到这&#xff0c;很多朋友问改进如何选择是最佳的&#xff0c;下面我就根据个人多年的写作发文章以及指导发文章的经验来看&#xff0c;按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通&#xff1a; 首推…

5.7打补丁—编译和官方一致的Linux_Generic包

5.7打补丁—编译和官方一致的Linux_Generic包 需求来源 某客户现场业务系统出现了查询丢失数据问题&#xff08;数据库为MySQL 5.7.21&#xff0c;使用Linux-Generic包部署)。 已查明&#xff1a;丢数据问题是触发了MySQL 5.7的一个bug&#xff0c;该bug在5.7的后继版本已修…

安装VMware ESXi虚拟机系统

简介&#xff1a;ESXi是VMware公司开发的一款服务器虚拟化操作系统。它能够在一台物理服务器上运行多个虚拟机&#xff0c;每个虚拟机都可以独立运行操作系统和应用程序&#xff0c;而且对硬件配置要求低&#xff0c;系统运行稳定。 准备工具&#xff1a; 1.8G或者8G以上容…

vue快速入门(二十三)侦听器的简单写法与完整写法

注释很详细&#xff0c;直接上代码 上一篇 新增内容 侦听器简单写法侦听对象或属性侦听器完整写法侦听对象&#xff08;可选深度侦听&#xff09; 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name…