DOM(操作html文档)

目录

 DOM获取元素

DOM获取子节点

DOM中的节点 

节点的操作

获取子节点、子元素

获取父元素

获取兄弟节点、兄弟元素

兼容兄弟元素

DOM对元素的操作(增删改)

创建节点

添加节点

替换

克隆

DOM对属性节点的操作

DOM的一些特殊元素操作(table、form)

table

form

表单元素的专属事件

input的专属事件

form元素的专属事件

表单元素的专属方法

form元素的专属方法

input的专属方法


 

  • 定义:DOM 全拼为 document object model html文档对象模型 主要用来帮助用户操作html文档

  • 原理:DOM并不是直接操作html文档 而是先将 html文档 抽象化为一个树状结构(DOM树)之后 通过对树状结构进行操作 从而影响 html页面的效果

 DOM获取元素

  • DOM获取子节点

    • childNodes

      • 用法:父元素.childNodes;

      • 作用:获取父元素的所有子节点

  • DOM中的节点 

    • DOM中的节点 分为4类

      • 元素节点(标签节点):就是html结构中元素抽象化出来的节点 元素名

      • 文本节点:html结构中 文本内容抽象化出来的节点 text

      • 属性节点:html结构中 元素属性抽象化出来的节点

      • 注释节点:html结构中 注释抽象化出来的节点 comment

    • 注意:在DOM中 即使是回车换行等内容 也会被抽象化为 文本节点

    • 节点的操作

      • 节点类型

        • 节点具备一个属性——nodeType

        • 用法:节点.nodeType

        • 作用:获取到节点的节点类型

        • 不同节点的节点类型如下

          • 元素节点:1

          • 属性节点:2

          • 文本节点:3

          • 注释节点:8

      • 节点名称

        • 节点具备一个属性——nodeName

        • 用法:节点.nodeName

        • 元素节点:大写的标签名

        • 文本节点:#text

        • 注释节点:#comment

        • 说明:一般我们多用 节点名称 来判断当前元素 是什么元素

      • 节点值

        • 节点具备一个属性——nodeValue

        • 用法:节点.nodeValue

        • 元素节点:null

        • 文本节点和注释节点:文本内容/注释内容

        • 说明:一般多用于 操作文本节点的内容

        • 注意:这个属性 既可以设置 也可以获取的属性

          • 设置用法:节点.nodeValue = "节点内容"

  • 获取元素的新方法

    • document/父元素.querySelector("css3选择器")

      • 作用:通过指定的css3选择器 获取对应的元素

      • 注意:本方法 一次只能获取一个元素 得到的结果也是唯一的元素

      • 注意:如果有多个元素 满足选择器条件 获取到的是 第0个

    • document/父元素.querySelectorAll("css3选择器")

      • 作用:获取所有满足css3选择器的元素 组成一个伪数组

  • 获取子节点、子元素

    • 父元素.childNodes ==> 获取父元素中的所有子节点

    • 父元素.children ==> 获取父元素中的所有子元素

  • 获取父元素

    • parentNode

      • 用法:子节点.parentNode

      • 作用:获取到父节点

    • offsetParent

      • 用法:子节点.offsetParent

      • 作用:获取带定位的父节点(不是静态定位)如果没有带定位的父节点 就 获取到 body

  • 获取兄弟节点、兄弟元素

    • nextSibling

      • 用法:节点.nextSibling;

      • 作用:在标准浏览器中 获取到下一个兄弟节点 在ie低版本中 获取到下一个兄弟元素

    • nextElementSibling

      • 用法:节点.nextElementSibling;

      • 作用:在标准浏览器中 获取到下一个兄弟元素 在 ie低版本中不能用

    • previousSibling

      • 用法:节点.previousSibling;

      • 作用:在标准浏览器中 获取到上一个兄弟节点 在ie低版本中 获取到上一个兄弟元素

    • previousElementSibling

      • 用法:节点.previousElementSibling;

      • 作用:在标准浏览器中 获取到上一个兄弟元素 在 ie低版本中不能用

    • 兼容兄弟元素

      • 我们做一下 获取兄弟元素的方法兼容

        • 在标准浏览器中:nextElementSibling 和 previousElementSibling获取兄弟元素

        • 在ie低版本中:nextSibling 和 previousSibling获取兄弟元素

      • 兼容的思路是 判断 当前所处的浏览器 是什么 根据不同的浏览器 使用不同的方法

  • 获取子元素的方法

    • firstChild、firstElementChild

      • 父元素.firstChild 在标准浏览器中 获取第一个子节点 在ie低版本中 获取第一个子元素

      • 父元素.firstElementChild 在标准浏览器中 获取第一个子元素 在ie低版本中 undefined

    • lastChild、lastElementChild

      • 父元素.lastChild 获取最后一个子节点

      • 父元素.lastElementChild 获取最后一个子元素

DOM对元素的操作(增删改)

    • 这里说道的增 其实是 给DOM树中 添加节点

    • 我们将增添节点的过程 分为两步

      • 创建节点

        • 创建文本节点(不常用)

          • createTextNode

            • 用法:document.createTextNode("文本内容")

            • 作用:创建指定内容的文本节点

        • 创建元素节点

          • createElement

            • 用法:document.createElement("元素名")

            • 作用:创建一个元素节点

      • 添加节点

        • appendChild

          • 用法:父元素.appendChild(要添加的子元素)

          • 作用:将指定的子元素 添加到 父元素的末尾

        • insertBefore

          • 用法:父元素.insertBefore(新子节点,旧子节点)

          • 作用:将新子节点 添加到 父元素中 旧子节点的 前面

        • 总结:上述两个方法 就是DOM中 向DOM树 添加节点的方法 但是 这两个方法 都存在问题 如果追加的节点 已经在DOM树中 存在了 就会产生位置的移动

    • remove

      • 用法:节点.remove()

      • 作用:从DOM树中 移除掉 这个节点

    • removeChild

      • 用法:父元素.removeChild(指定的子节点)

      • 作用:删除掉父元素中的子节点

    • 替换

      • replaceWith

        • 用法:旧节点.replaceWith(新节点)

        • 作用:使用新节点 替换 旧节点

      • replaceChild

        • 用法:父节点.replaceChild(新子节点,旧子节点)

        • 作用:使用新子节点 替换旧子节点

    • 克隆

      • cloneNode

        • 用法1:节点.cloneNode()

          • 作用:将指定节点 进行复制

          • 注意:这种克隆 只能克隆当前元素 元素内容 则 无法克隆

        • 用法2:节点.cloneNode(true)

          • 作用:深克隆,将指定节点 和 其内容 都克隆下来

DOM对属性节点的操作

  • 我们之前讲到的 js操作属性的方法——元素.属性名 元素.属性名 = 属性值

  • 但是 这种操作方式 无法操作元素的非自带属性 和 自定义属性

  • 今天我们讲 操作属性节点 通过对属性节点的操作 我们将可以操作元素的 非自带属性 和 自定义属性

  • 对属性节点的操作 分为两个方法

    • 获取属性值——getAttribute

      • 用法:元素节点.getAttribute("属性名")

    • 设置属性值——setAttribute

      • 用法:元素.setAttribute("属性名","属性值")

    • 移除属性——removeAttribute

      • 用法:元素.removeAttribute("属性名")

DOM的一些特殊元素操作(table、form)

  • table

    • 获取表格元素

      • 获取thead:table元素.tHead

      • 获取tbody:table元素.tBodies

        • 注意:tBodies得到的是一个元素集合 其中包含table中的所有tbody 因此 需要加索引

      • 获取tfoot:table元素.tFoot

      • 获取tr:范围.rows

        • 得到的结果 是一个元素集合 其中包含指定范围内的所有tr

        • 范围可以是thead tbody tfoot 也可以直接是 table

      • 获取单元格(td 和 th):tr.cells

        • 注意:只能使用tr来获取其中的单元格

form

  • 表单元素的获取

    • 我们在form元素中 可以通过 form.表单元素的name属性 来获取对应的表单元素

<form>
    <input type="text" name="username"/>
</form>
<script>
	var form = document.querySelector("form");
    form.username;//就是input
</script>

  • 表单元素的专属事件

    • input的专属事件

      • onblur

        • 离焦事件 当input失去焦点的时候 触发该事件

      • onfocus

        • 聚焦事件 当input获取到焦点的时候 触发该事件

      • onchange

        • input内容改变事件 会在input的内容改变后 失去焦点的时候触发

    • form元素的专属事件

      • onsubmit

        • 提交事件,当表单提交的时候 触发这个事件

        • form.onsubmit = function(){}

        • 注意:我们如果在提交事件的处理函数中 return false 就可以阻止表单提交 return false 一定要写在所有代码的最后面

      • onreset

        • 重置事件,当表单重置的时候 触发这个事件

        • form.onreset = function(){}

        • 注意:我们如果想阻止重置 只要在重置事件的处理函数中 return false 即可

    • 表单元素的专属方法

      • form元素的专属方法

        • submit

          • 用法:form.submit()

          • 作用:提交表单

        • reset

          • 用法:form.reset()

          • 作用:重置表单

      • input的专属方法

        • blur

          • 用法:input.blur()

          • 作用:让input失去焦点

        • focus

          • 用法:input.facus()

          • 作用:让input获取焦点

        • select

          • 用法:input.select()

          • 作用:让input的内容被选中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值