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>
目录
相关文章
|
7月前
|
JavaScript 前端开发
JavaScript初学
本系列文章是对自己大一假期学习js后,是对自己学习js过程中的一些理解和看法,本篇文章主要是对学习JavaScript后我们可以去做一些什么事情,算是对js有一个初步了解。本章主要是对js初学者,对于js的使用方向有一个初步了解,同时也是对我学习过程中的一中记录,也是同这些实例的练习,然后对于js有了更加清晰的了解,对于我来说,可玩性更高了。
|
7月前
|
JavaScript 前端开发
JavaScript-T1
JavaScript-T1
46 0
|
JavaScript 前端开发 算法
JavaScript
JavaScript
|
JavaScript
JavaScript2
JavaScript2
42 0
|
存储 缓存 JavaScript
非常实用的JavaScript技巧
非常实用的JavaScript技巧
62 0
|
JavaScript 前端开发
初学JavaScript
JavaScript
79 0
|
存储 JavaScript 前端开发
【初识JavaScript-03】
【初识JavaScript-03】
95 0
【初识JavaScript-03】
|
安全 JavaScript 前端开发
你不知道的JavaScript丛书总结(一)
你不知道的JavaScript丛书总结(一)
|
JavaScript 前端开发 UED
Javascript
Javascript
|
JavaScript 前端开发
JavaScript 的 this 小结
JavaScript 语言的一个关键字。 它是函数运行时,在函数体内部自动生成的一个对象,只能在函数体内部使用。 上面代码中,函数test运行时,内部会自动有一个this对象可以使用。
990 0

相关实验场景

更多