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

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

相关文章

逆向案例十六——简单webpack逆向,财联社信息

网址链接&#xff1a;财联社A股24小时电报-上市公司动态-今日股市行情报道 数据包sign参数为加密&#xff0c;可以直接搜索找参数的位置&#xff0c;搜索不到的情况下&#xff0c;在断点跟栈&#xff1a; 确定js文件所在位置&#xff0c;并打上断点。 点击加载刷新页面。可以发…

golang map总结

目录 概述 一、哈希表原理 哈希函数 哈希表和哈希函数的关系 哈希表的优势 哈希冲突 什么是哈希冲突 如何处理哈希冲突 链表法 开放寻址法 哈希表常见操作过程 存储数据 检索数据 删除数据 常用的哈希算法 哈希表的应用场景 二、golang map map的内部结构 h…

突破编程_前端_SVG(circle 圆形)

1 circle 元素的基本属性和用法 SVG 的 <circle> 元素用于在SVG文档中绘制圆形。它具有几个基本属性&#xff0c;允许定义圆形的大小、位置、填充颜色和边框样式。以下是 <circle> 元素的基本属性及其详细解释&#xff1a; 1.1 cx 和 cy 描述&#xff1a;这两个…

30元腾讯云服务器搭建幻兽帕鲁Palworld多人联机游戏,畅玩

幻兽帕鲁太火了&#xff0c;官方palworld服务器不稳定&#xff1f;不如自建服务器&#xff0c;基于腾讯云幻兽帕鲁服务器成本32元全自动部署幻兽帕鲁服务器&#xff0c;超简单有手就行&#xff0c;全程自动化一键部署10秒钟即可搞定&#xff0c;无需玩家手动部署幻兽帕鲁游戏程…

AD7685BRMZRL7 16位 2.3V 低功耗模数转换器芯片 ADI

AD7685BRMZRL7是一款由ADI&#xff08;亚德诺&#xff09;公司生产的模数转换器&#xff08;ADC&#xff09;芯片。该芯片的主要功能是将模拟信号转换为数字信号&#xff0c;以便在数字系统中处理. AD7685BRMZRL7 规格信息&#xff1a; 制造商:Analog Devices Inc. 产品种类:模…

CSS特效---百分比加载特效

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

CentOS下部署ftp服务

要在linux部署ftp服务首先需要安装vsftpd服务 yum install vsftpd -y 安装完成后需要启动vsftpd服务 systemctl start vsftpd 为了能够访问ftp的端口&#xff0c;需要在防火墙中开启ftp的端口21&#xff0c;否则在使用ftp连接的时候会报错No route to host. 执行如下命令为f…

WebGL 2.0相较于1.0有什么不同?

作者&#xff1a;STANCH 1.概述 WebGL 1.0自推出以来&#xff0c;已成为广泛支持的Web标准&#xff0c;既能跨平台&#xff0c;还免版税。它通过插件为Web浏览器带来高质量的3D图形&#xff0c;这是迄今为止市场上使用最广泛的Web图形&#xff0c;并得到Apple&#xff0c;Goog…

Leetcode第28题:实现 strStr()【python】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a;LeetCode解锁1000题: 打怪升级之旅python数据分析可…

C#生成一个绿色文件

生成一个绿色文件免去了安装的繁琐过程&#xff0c;直接运行&#xff0c;非常方便。 新建一个类库项目 在类库Class1中实现简单的Sum方法。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespac…

【Hello算法】 > 第 2 关 >数据结构 之 数组与链表

数据结构 之 数组与链表 1&#xff1a;Understanding data structures &#xff01;——了解数据结构——1.1&#xff1a;Classification-分类-1.2&#xff1a;Type-类型- 2&#xff1a;Arrays are the bricks that make up the wall of data structures *——数组是组成数据结…

二、Maven安装

Maven安装 一、Centos7.9安装1.下载2.安装3.设置国内镜像4.设置maven安装路径 一、Centos7.9安装 1.下载 第一种&#xff1a;官网下载最新版本&#xff1a;http://maven.apache.org/download.cgi第二种&#xff1a;其他版本下载&#xff1a;https://archive.apache.org/dist/…