Day14 JavaScript

简介: JavaScript
DOM
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script text="javascript">

        /*
            DOM(Document Object Model):
                称为文档对象模型
                    文档: 表示的是整个HTML网页文档
                    对象:表示将网页中的每一个部分都转换为一个对象
                    模型:表示对象之间的关系
        
            节点:
                Node是构成我们网页的最基本的组成部分
                网页中的每一个部分都可以称为是一个节点。
                比如: html标签、属性、文本、注释、整个文档等都是一个节点。

                虽然都是节点,但是实际上他们的具体类型是不同的。
                    比如∶
                        标签我们称为元素节点
                        属性称为属性节点
                        文本称为文本节点
                        文档称为文档节点
                节点的类型不同,属性和方法也都不尽相同。

                浏览器已经为我们提供文档节点对象,这个对象是window属性
                可以在页面中直接使用,文档节点代表的是整个网页


            事件:
                就是文档或浏览器窗口中发生的一些特定的交互瞬间。
                JavaScript 与HTML之间的交互是通过事件实现的。
                对于Web应用来说,有下面这些代表性的事件∶
                    点击某个元素
                    将鼠标移动至某个元素上方
                    按下键盘上某个键...
                
                我们可以在事件对应的属性中设置一些js代码,
                这样当事件被触发时,其对应的函数将会被调用
                    绑定一个单击事件:
                        像这种为单击事件绑定的函数,我们称为单击响应函数

            
            DOM相关的方法:

                getElementByld()
                    通过id属性获取一个元素节点对象

                getElementsByTagName()
                    通过标签名获取一组元素节点对象
                        这个方法会给我们返回一个类数组对象,
                        所有查询到的元素都会封装到对象中
                        即使查询到的元素只有一个,也会封装到数组中返回

                    childNodes
                        属性,表示当前节点的所有子节点
                        childNodes属性会获取包括文本节点在内的所有节点
                        根据DOM标签标签间空白也会当成文本节点

                    childien
                        属性,可以获取当前元素的所有子元素

                    firstChild
                        属性,表示当前节点的第一个子节点
                        包括空白文本节点

                    firstElementChild
                        获取当前元素的第一个子元素

                    lastChild
                        属性,表示当前节点的最后一个子节点

                    parentNode
                        属性,表示当前节点的父节点

                    previousSibling
                        属性,表示当前节点的前一个兄弟节点

                    nextSibling
                        属性,表示当前节点的后一个兄弟节点



                    getElementsByName()
                        通过name属性获取一组元素节点对象

                    文档节点.innerHTML
                        innerHTML用于获取元素内部的HTML代码
                        对于自结束标签,这个属性没有意义

                        如果需要读取元素节点属性
                            直接使用元素.属性名
                            例如:元素.id   元素.name   元素.value
                            注意:class属性不能采用这种方式
                                读取class属性时需要使用元素.className

                    文档节点.innerText
                        该属性可以获取到元素内部的文本内容
                        它和innerHTML类似,不同的是它会自动将html去除



                    在document中有一个属性body,它保存的是body的引用
                        var body = document.body;

                    document.documentElement保存的是html根标签
                        var html = document.documentElement;

                    document.all
                        代表页面中所有的元素

                    document.querySelector()
                        需要一个选择器的字符串作为参数

                        可以根据一个CSS选择器来查询一个元素节点对象

                        使用该方法总会返回唯一的一个元素,
                        如果满足条件的元素有多个,那么它只会返回第一个

                    document.querySelectorAll(()
                        该方法和querySelector()用法类似
                        不同的是它会将符合条件的元素封装到一个数组中返回
                        即使符合条件的元素只有一个,它也会返回数组


                    document.createElement()
                        可以用于创建一个元素节点对象,
                        它需要一个标签名作为参数,
                        将会根据该标签名创建元素节点对象,
                        并将创建好的对象作为返回值返回

                    document.createTextNode()
                        可以用来创建一个文本节点对象
                        需要一个文本内容作为参数,
                        将会根据该内容创建文本节点,并将新的节点返回

                    appendchild()
                        向一个父节点中添加一个新的子节点
                        用法:
                            父节点.appendChild(子节点);

                    insertBefore()
                        可以在指定的子节点前插入新的子节点
                            语法:
                                父节点.insertBefore(新节点,旧节点);

                    replacechild()
                        可以使用指定的子节点替换已有的子节点
                            语法:
                                父节点.replaceChild(新节点,旧节点);

                    removeChild()
                        可以删除一个子节点
                            语法:
                                父节点.removeChild(子节点);

                通过JS修改元素的样式:
                    语法:
                        元素.style.样式名 = 样式值

                    注意:
                        如果CSS的样式名中含有-,
                        这种名称在JS中是不合法的比如background-color
                        需要将这种样式名修改为驼峰命名法,
                        去掉-,然后将-后的字母大写
                    
                    我们通过style属性设置的样式都是内联样式,
                    而内联样式有较高的优先级,
                    所以通过JS修改的样式往往会立即显示

                    但是如果在样式中写了!important,则此时样式会有最高的优先级,
                    即使通过JS也不能覆盖该样式,此时将会导致JS修改样式失效
                    所以尽量不要为样式添加!important


                读取元素的样式
                    语法:
                        元素.style.样式名
                    
                    我们通过style属性设置的样式都是内联样式
                    无法读取样式表中的样式

                获取元素的当前显示的样式
                    语法:
                        元素.currentStyle.样式名
                    
                    它可以用来读取当前元素正在显示的样式
                    如果当前元素没有设置该样式,则获取它的默认值

                    currentstyle只有IE浏览器支持,其他的浏览器都不支持
                    在其他浏览器中可以使用getComputedstyle()这个方法
                    来获取元素当前的样式这个方法是window的方法,可以直接使用
                    需要两个参数
                        第一个:要获取样式的元素
                        第二个:可以传递一个伪元素,一般都传null
                    
                    该方法会返回一个对象,对象中封装了当前元素对应的样式
                
        */
        /*
            为window绑定一个onload事件
            onload事件会在整个页面加载完成之后才触发
                该事件对应的响应函数将会在页面加载完成之后执行,
                这样可以确保我们的代码执行时所有的DOM对象已经加载完毕了
        */
        document.onload = function () {
            // 整个网页的文档节点
            console.log(document);//输出 整个文档节点

            // 通过id获取指定的文档节点
            var btn = document.getElementById("btn");
            console.log(btn);//输出 按钮节点

            // 可以为按钮的对应事件绑定处理函数的形式来响应事件
            btn.onclick = function () {
                // 修改指定节点的内容
                btn.innerHTML = "BanQ";
            }
        }


        /*
            其他样式的相关属性:
                clientWidth
                clientHeight
                    这两个属性可以获取元素的可见宽度和高度
                    这些属性都是不带px的,返回都是一个数字,可以直接进行计算
                    会获取元素宽度和高度,包括内容区和内边距

                offsetWidth
                offsetHeight
                    获取元素的整个的宽度和高度,包括内容区、内边距和边框

                offsetParent
                    可以用来获取当前元素的定位父元素
                    会获取到离当前元素最近的开启了定位的祖先元素
                        如果所有的祖先元素都没有开启定位,则返回body

                offsetLeft
                    当前元素相对于其定位父元素的水平偏移量
                offsetTop
                    当前元素相对于其定位父元素的垂直偏移量

                scrollLeft
                    可以获取水平滚动条滚动的距离
                scrollTop
                    可以获取垂直滚动条滚动的距离

                当满足scrollHeight - scrollTop == clientHeight
                    说明垂直滚动条滚动到底了
                当满足scrollWidth - scrollLeft == clientWidth
                    说明水平滚动条滚动到底了

        */


    </script>

</head>

<body>

    <button id="btn">我是一个按钮</button>

</body>

</html>
事件
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <script text="javascript">

        /*
            事件:
                onmousemove
                    该事件将会在鼠标在元素中移动时被触发

                clientX
                    可以获取鼠标指针的水平坐标
                cilentY
                    可以获取鼠标指针的垂直坐标


            事件对象:
                当事件的响应函数被触发时,
                浏览器每次都会将一个事件对象作为实参传递进响应函数
                在事件对象中封装了当前事件相关的一切信息,
                比如:鼠标的坐标 键盘哪个按键被按下 鼠标滚轮滚动的方向。。

            解决事件对象的兼容性问题
                event = event || window.event;

            
            事件的冒泡(Bubble):
                所谓的冒泡指的就是事件的向上传导,当后代元素上的事件被触发时,
                其祖先元素的相同事件也会被触发

                在开发中大部分情况冒泡都是有用的
                如果不希望发生事件冒泡可以通过事件对象来取消冒泡
                可以将事件对象的cancelBubble设置为true,即可取消冒泡
                    event.cancelBubble = true;

            事件的委派:
                指将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件触发时,
                会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。
                
                事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能

                target
                    event中的target表示的触发事件的对象

            事件的绑定:
                使用  对象.事件= 函数的形式  绑定响应函数,
                    它只能同时为一个元素的一个事件绑定一个响应函数,
                    不能绑定多个,如果绑定了多个,则后边会覆盖掉前边的

                addEventListener()
                    通过这个方法也可以为元素绑定响应函数
                        参数:
                            事件的字符串,不要on
                            回调函数,当事件触发时该函数会被调用
                            是否在捕获阶段触发事件,需要一个布尔值,一般都传false

                    使用addEventListener()可以同时为一个元素的相同事件同时绑定多个响应函数,
                    这样当事件被触发时,响应函数将会按照函数的绑定顺序执行

            
            事件的传播:
                事件传播分成了三个阶段
                1.捕获阶段
                    在捕获阶段时从最外层的祖先元素,向目标元素进行事件的捕获,但是默认此时不会触发事件
                2.目标胎段
                    事件捕获到目标元素,捕获结束开始在目标元素上触发事件
                3.冒泡阶段
                    事件从目标元素向他的祖先元素传递,依次触发祖先元素上的事件

                如果希望在捕获阶段就触发事件,
                可以将addEventListener()的第三个参数设置为true
                一般情况下我们不会希望在描获阶段触发事件,所以这个参数一般都是false
        
        */

    </script>

</head>

<body>

</body>

</html>
目录
相关文章
|
Python
python之print函数
python之print函数
168 0
|
运维 监控 Cloud Native
云原生架构下的微服务演进之路
云原生技术正以前所未有的速度重塑软件开发与运维的生态。本文将深入探讨在云原生环境下,微服务如何从概念走向成熟实践,以及这一过程中所面临的挑战和解决策略。我们将通过具体案例,分析微服务架构的优势,并讨论如何在云计算平台上高效地部署和管理微服务,同时确保系统的可伸缩性、弹性和安全性。
73 0
|
13天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
|
5天前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
|
12天前
|
人工智能 自然语言处理 自动驾驶
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
关于举办首届全国大学生“启真问智”人工智能模型&智能体大赛决赛的通知
|
8天前
|
人工智能 运维 Java
Spring AI Alibaba Admin 开源!以数据为中心的 Agent 开发平台
Spring AI Alibaba Admin 正式发布!一站式实现 Prompt 管理、动态热更新、评测集构建、自动化评估与全链路可观测,助力企业高效构建可信赖的 AI Agent 应用。开源共建,现已上线!
777 23
|
7天前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
497 36