JavaScript第二部分知识

DOM

节点:Node,构成HTML文档的基本单元

文档节点:整个HTML文档 元素节点:HTML文档中的HTML标签

属性节点:元素的属性 文本节点:HTML标签中的文本内容

事件

文档或浏览器窗口中发生的一些特定的交互瞬间。

简单理解:触发--响应的机制

  • 事件源 :事件被触发的对象 、按钮
  • 事件类型:如何触发什么事件 比如鼠标点击(onclick)、经过事件处理程序通过一个函数赋值的方式完成
  • 意:onload事件会在整个页面加载完成之后才触发该事件对应的响应函数 ,将会在页面加载完成之后执行,确保代码执行时所需的DOM对象加载完毕。

获取元素节点

通过document对象调用

  • getElementtById()通过id属性获取一个元素节点对象
  • getElementsByTagname('标签名')通过标签名获取一组元素节点对象
  • getElementsByClassName()通过类名获取一组元素节点对象,但是该方法不支持IE8以下的浏览器。还有一种方法,使用querySelector()查询。
  • getElementsByName()通过name属性获取一组元素节点对象
  • querySelector('选择器'); //根据指定选择器返回第一个元素对象
  • querySelectorAl()返回指定选择器的所有元素对象集合
  • HTML常用属性 dir:规定元素中内容的文本方向 id:规定元素的唯一id style:规定元素的行内CSS样式 title:规定有关元素的额外信息 translate:规定是否应该翻译元素内容 HTML常用标签:<li><div><button><h1>

获取元素

1.获取body元素: document.body

2.获取html元素 :document.documentElement

获取元素节点的子节点

通过具体的元素节点调用

1.getElementsByTagName() 方法,返回当前节点的指定标签名后代节点

2.childNodes 属性,表示当前节点的所有子节点

3.firstChild 属性,表示当前节点的第一个子节点

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

获取父节点和兄弟节点

通过具体的节点调用

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

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

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

操作元素

dom查询的剩余方法

  • innerHTML属性可以获取到元素内部的HTML代码

  • 获取body属性值直接用document.body

  • 获取html根标签用document.documentElement

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

  • document.querySelector()需要一个选择器的字符串作为参数,比如: .box1 div ,可以根据一个选择器来查询一个元素节点对象,也可以在任何浏览器下使用该方法获取类名。使用该方法总会返回唯一的一个元素,如果满足条件的元素有多个,那么它只会返回第一个元素

DOM增删查改用到的知识点

  • confirm()方法:显示带有一段消息以及确认按钮和取消按钮的对话框,需要一个字符串作为参数,该字符串会作为提示文字显示出来,其返回值是true和false

  • this的使用方法:点击哪个超链接this就指向哪

  • 超链接的使用:点击超链接后,超链接会跳转页面,是它的默认行为

  • 如何取消超链接的默认行为:可以通过在响应函数的最后return false来取消

操作内联样式

  • 如果CSS的样式中含有-,这种名称在JS中是不合法的比如background-color,需要将这种样式改为驼峰命名,即backgroundColor

  • 通过 style属性设置的样式都是内联样式,而内联样式有较高的优先级,所以通过JS修改的样式往往会立即显示,但是如果在样式中写了!important,则此时样式会有最高的优先级

获取元素的样式

  • 在IE浏览器中获取元素的当前显示样式

    语法:元素.currentStyle.样式名

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

  • 在其他浏览器中

    getComputerdStyle()这个方 法来获取元素的当前样式,该方法是window的方法,可直接使用。

    需要两个参数:第一个,要获取样式的元素;第二个,可以传递一个伪元素,一般都传null。

    该方法会返回一个对象,对象中封装了当前元素对应的样式。

    可以通过对象.样式名来读取样式。如果获取的样式没有设置,则会获取到真实的值,而不是默认值auto。

其他样式相关的属性

  • clientWidth,clientHeight

    这两个属性可以获取元素的可见高度和宽度,这些属性都不带px,返回都是一个数字,可以直接进行计算,会获取元素宽度和高度,包括内容区和内边距。这些属性都是只读的,不可修改。

  • offsetWidth,offsetHeight

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

  • offsetParent

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

  • offsetLeft

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

  • offsetTop

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

  • scrollHeight

    可以获取元素整个滚动区域的高度

  • scrollLeft

    可以获取水平滚动条滚动的距离

  • scrollTop

    可以获取垂直滚动条滚动的距离

  • 当满足scrollHeight-scrollTop=clientHeight,说明垂直滚动条滚动到底了。设置滚动条的方法:overflow:auto。

  • 为表单添加disabled=“disabled”则表单将变成不可用的状态。disabled属性可以设置一个元素是否禁用,设置为true禁用,false为可用。

  • onscroll事件会在元素的滚动条滚动时触发。

事件对象

  • onmousemove事件将会在鼠标在元素中移动时被触发。

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

  • clientX可以获取鼠标指针的水平坐标,clientY可以获取鼠标指针的垂直坐标。在开启定位下使用。相对于窗口。

  • pageX和pageY可以获取鼠标相对于当前页面的坐标,但是在IE8中不支持

  • 在IE8中,响应函数被触发时,浏览器不会传递事件对象。在IE8及以下的浏览器中,是将事件对象作为window对象的属性保存的(事件对象是一个全局对象)

  • 解决事件对象的兼容性问题

    如果event存在表示有对象,如果不存在则让他等于window.event。

 

事件的冒泡

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

  • 取消冒泡的方法,可以将事件对象的cancelBubble设置为true

事件的委派

  • 将事件统一绑定给元素的共同的祖先元素,这样当后代元素上的事件被触发时,会一直冒泡到祖先元素,从而通过祖先元素的响应函数来处理事件。

  • 事件委派是利用了冒泡,通过委派可以减少事件绑定的次数,提高程序的性能。

  • 如果触发对象不是我们期望的元素,可以使用判断语句执行。

事件的绑定

  • 使用对象.事件=函数 的形式绑定响应函数,它只能同时为一个元素的

    一个事件绑定一个响应函数,不能绑定多个,如果绑定了多个,则后边会覆盖掉前面的。

  • addEventListner()方法也可以为元素绑定响应函数,该方法可以同时为一个元素的相同事件同时绑定多个响应函数,这样当事件被触发时,响应函数将会按照函数的绑定顺序执行。IE8及以下不支持。

    需要的参数:

    1.事件的字符串,不要on,比如’click‘

    2.回调函数,当事件触发时该函数会被调用

    3.是否在捕获阶段触发事件,需要一个布尔值,一般都传false

  • attachEvent()方法可以在IE8 中使用,该方法可以同时为一个时间绑定多个响应函数,不同的是它是后绑定先执行。

    需要的参数:

    1.事件的字符串,要on,比如onclick

    2.回调函数

  • bind函数

  • 事件的传播

    W3C综合了两个公司的方案,将事件传播分成了三个阶段

    1.捕获阶段

    在捕获阶段时从最外层的祖先元素,向目标元素进行事件 的捕获,但是默认不会触发事件

    2.目标阶段

    事件捕获到目标元素,捕获结束开始在目标元素上触发事件

    3.冒泡阶段

    事件从目标阶段向它的祖先元素传递,依次触发祖先元素上的事件

拖拽练习

  • setCapture()方法

    只有IE支持,但是在火狐中调用时不报错,而如果使用chrome调用会报错

  • &&操作符

滚轮事件

  • onwheel事件

键盘事件

  • 键盘事件一般都会绑定给一些可以获取到焦点的对象或者是document

  • onkeydown

    • 按键被按下

    • 对于onkeydown来说一直按着某个键不松手,则事件会一直触发

    • 当onkeydown连续触发时,第一次和第二次之间间隔时间会稍长一点,其他的会非常快

    • 这种设计是为了防误触的操作

  • keyCode可以获取按键的编码,通过它判断那个键被按下

    • 事件对象还提供了除了keyCode以外的几个属性

      • altKey

      • ctrlKey

      • shiftKey

      • 这三个用来判断alt ctrl和shift是否被按下,如果按下返回true,否则返回false

BOM

  • History

    • 对象可以用来操作浏览器向前或向后翻页

    • length属性,可以获取到当前访问的链接数量

    • back()可以用来回退到上一个页面,作用和浏览器的回退按钮一样

    • forward()可以跳转到下一个页面,作用和浏览器的前进按钮一样

    • go()可以用来跳转到指定的页面,它需要一个整数作为参数

  • Location

    • 该对象中封装了浏览器的地址栏的信息。如果直接打印location,则可以获取到地址栏的信息(当前页面的完整路径)

    • assign()用来跳转到其他的页面,作用和直接修改location一样

    • reload()用于加载当前页面,作用和刷新按钮一样。如果在方法中传递一个true,作为参数。则会强制清空缓存刷新页面

    • replace()可以使用一个新的页面替换当前页面,调用完毕也会跳转页面,不会生成历史记录,不能使用回退按钮回退

定时器简介

  • setInterval()定时调用,可以将一个函数每隔一段时间执行一次[循环定时器]

    • 参数

      1. 回调函数,该函数每隔一段时间被调用一次

      2. 每次调用间隔的时间,单位是毫秒

    • 返回值

      1. 返回一个Number类型的数据,返回的数值是他的唯一标识,即定时器的位数

  • clearInterval()可以用来关闭一个计时器,方法中需要一个定时器的标识作为参数,这样将关闭标识对应的定时器。它可以接受任何参数,如果接收的是一个有效的定时器的标识,则停止对应的定时器;如果接收的不是有效的标识,则什么也不做。

延时调用

  • setTimeout()延时调用一个函数不马上执行,而是隔一段时间以后在执,而且只会执行一次。[超时定时器]

  • 延时调用和定时调用的区别,定时调用会执行多次,而延时调用只会执行一次。

  • setTimeout()开启一个延时调用,clearTimeout()关闭一个延时调用。

定时器的应用

  • parseInt()把字符串转为数值

  • getstyle

轮播图

大概用到的一些知识点(未整理)

  • 设置图片居中:margin:0 auto

  • 内联元素 宽高不起作用

  • 设置左右浮动,背景会平铺

  • opacity:0.5 设置半透明 兼容IE8:filter:alpha(opacity=50)

  • bottom:0px 设置在box底部

  • 使用js设置导航栏居中: 元素.offsetWidth为元素的宽度

  • a:hover

类的操作

  • 通过style属性来修改元素的样式,每修改一个样式,浏览器就要重新渲染一次页面,这样执行的性能较差。

  • 所以我们通过修改元素的class属性来间接修改样式,只需要修改一次即可修改多个样式。

  • addclass()添加类 removeclass()删除类。

  • toggleclass()切换参数 如果元素中具有该类则删除,如果元素中不具有该类则添加。

JSON

  • Javascript Object Natation JS对象表示法。

  • 和JS对象的格式一样,但JSON字符串中的属性名必须加双引号,其他的和JS一致。它可以转换为任意语言的对象,在开发中主要用于数据的交互。

  • JSON分类

    1. 对象{ }

    2. 数组[ ]

  • JSON中允许的值

    1. 字符串

    2. 数值

    3. 布尔值

    4. null

    5. 对象

    6. 数组

      注意:属性名必须加双引号

  • JSON对象

    该对象可以将JSON转换为JS对象,也可以将JS对象转换为JSON

  • JSON.parse()

    • 可以将JSON转换为JS对象

    • 需要一个JSON字符串作为参数,返回值是一个对象

  • JSON.stringify()

    • 可以将JS对象转换为JSON

    • 需要一个js对象作为参数,返回一个JSON字符串

  • eval()

    • 可以用来执行一段字符串形成的代码,并将执行结果返回。

    • 如果使用该函数执行的字符串中含有{},它会将{}当成是代码块。在字符串前后各加一个“(“ ,”)”就不会被当成代码块。

posted @ 2022-04-01 18:54  Bughead  阅读(47)  评论(0编辑  收藏  举报