【JS交互篇】DOM操作基础

一、DOM概述

在这里插入图片描述

1.1 什么是DOM

  • DOM(Document Object Model)文档对象模型,用来表示和操作html或xml文档内容的基础API;
  • 当网页被加载时,浏览器会创建页面的文档对象模型DOM,而DOM模型被构造为对象的树(Dom Html Tree);
  • DOM包含了所有的html标签元素、文本字符串、甚至是html注释;
  • 利用DOM中的属性和方法,使程序有能力动态的访问和更新文档中的内容、结构以及样式,这样就使得页面的交互性大大增强;

原生JavaScipt案例合集
JavaScript +DOM基础
JavaScript 基础到高级
Canvas游戏开发

1.2 DOM应用

  • 通过DOM操作能够改变页面中所有HTML元素;
  • 通过DOM操作能够改变页面中所有HTML属性;
  • 通过DOM操作能够改变页面中所有CSS样式;
  • 通过DOM操作能够对页面中所有事件做出反应;

1.3 DOM树

DOM把层次中的每一个对象都称之为节点,这个层次结构可以看作树形结构,就如同我们的目录,一个根目录下有子目录,子目录下面还有子目录。DOM树形图如下;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCxjW8vT-1691456155382)(01_DOM基础.assets/image-20210220113047306.png)]

1.4 DOM节点类型与相关属性

DOM树中所有的对象都是节点,如:文档节点、元素节点、属性节点、文本节点、注释节点等;

节点相关的属性如下:

  • nodeName 获取节点的名称,只读
  • nodeValue 获取节点内容(适用于文本节点和注释节点)
  • nodeType 获取节点类型,只读

一个HTML或XML文档的文件,元素,属性等有不同的节点类型。有12种不同的节点类型,不同的节点类型也可以有不同的子节点类型如下:

节点类型描述子节点
1Element一个元素Element, Text, Comment, ProcessingInstruction, CDATASection, Entity参考手册
2Attr一个属性Text, Entity参考手册
3Text一个元素的文本内容 或属性None
4CDATASection一个文档的CDATA部分None
5Entity参考手册实体引用Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
6Entity一个实体Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
7ProcessingInstruction一个处理指令None
8Comment一个注释None
9Document整个文档(DOM树的根节点)Element, ProcessingInstruction, Comment, DocumentType
10DocumentType为文档实体提供接口None
11DocumentFragment表示邻接节点和它们的子树。Element, ProcessingInstruction, Comment, Text, CDATASection, Entity参考手册
12Notation代表一个符号在DTD中的声明None

通过属性nodeType可以判断节点类型,那么根据节点类型DOM树可以分为以下两种:

  • 第一种就是上面讲过的,包含了所有标签、属性、文本、注释等全部类型的DOM树,可以称为节点(node)树;
  • 第二种就是只包含标签这一种类型,可以称为元素(element)树。元素树状图更加简洁,查找和操作起来也更加快捷。所以,一般除非必要情况,都使用元素树来操作。

1.5 DOM节点层级关系

所谓DOM树中的节点关系,和我们人类直系关系相似,无非就是父子关系、兄弟关系、祖孙关系;对应节点如下:

  • 父节点(parent node) 父节点可以拥有任意数量的子节点
  • 子节点(child node) 子节点只能拥有一个父节点
  • 兄弟节点(sibling node) 拥有相同父节点的同级节点
  • 根节点(root node) 一个html文档一般只有一个根节点,根节点没有父节点,是最上层的节点
  • 祖先节点 包含子节点的节点都可以叫做祖先节点,包括父节点
  • 后代节点 一个节点内包好的所有节点,叫做后代节点,包括子节点

1.6 节点的层级访问

  • parentNode 获取当前节点的父节点
  • childNodes 获取当前元素节点的所有子节点
  • firstChild 获取当前元素节点的第一个子节点
  • lastChild 获取当前元素节点的最后一个子节点
  • previousSibling 获取当前节点的前一个同级节点
  • nextSibling 获取当前节点的后一个同级节点

1.7 元素的层级访问(Element元素节点之间的访问)

  • firstElementChild、lastElementChild 类似firstChild和lastChild,返回类型只有Element类型,忽略文本、注释、空白节点(IE8及以下返回undefined)
  • nextElementSibling、previousElementSibling 类似nextSibling和previousSibling,返回类型只有Element类型,忽略文本、注释、空白节点(IE8及以下返回undefined)
  • children 得到当前元素所有子元素的集合
  • childElementCount 子元素的数量
  • Element同样可以访问parentNode属性,只不过返回的结果都是Elment类型

1.8 document对象属性介绍

  • document.documentElement 获取文档的根节点
  • document.body 获取文档的主体对象
  • document.cookie 设置和获取cookie(后面本地存储讲)
  • document.readyState 获取当前文档的载入状态

二、DOM基础操作

2.1 获取元素的六种方式

  • getElementById() 通过id名获取元素
  • getElementsByTagName() 通过标签名获取元素
  • getElementsByClassName() 通过类名获取元素
  • getElementsByName() 通过name的值来获取元素,一般用在表单中(含有name属性的标签)
  • querySelector() 通过css选择器获取符合条件的第一个元素
  • querySelectorAll() 通过css选择器获取符合条件的所有元素

2.2 向页面输出内容的方式

  • document.write()
  • element.innerHTML
  • element.innerText

2.3 操作html属性的属性和方法

  • 通过对象属性设置和获取元素属性,格式 element.att || element[att] 如:img.src li.type div.className div.id p.style 等
  • 通过get/set方法设置和获取属性(所有html属性)
    • element.getAttribute(name) 通过元素节点的属性名称获取属性的值
    • element.setAttribute(name,value) 设置元素中的属性值
    • element.removeAttribute(name) 删除指定属性

2.4 获取和设置css样式

  • 内部样式

    • 利用上面设置html属性的方式添加样式

      p.style.color = "red";
      p.style = "color:red;text-indent:2em;";
      p.setAttribute("style","color:red;text-indent:2em;")
      
    • 利用cssText添加多个样式

      p.style.cssText = "color:red;text-indent:2em;";
      
    • 清除内部样式

      element.style.cssText = "";
      element.removeAttribute("style","");
      element.style="";
      
  • 外部样式(考虑兼容性)

    高级浏览器使用 window.getComputed(element, null)

    IE低版本浏览器使用 element.currentStyle

    // 浏览器兼容性写法
    function getOutStyle(ele,attr) {
        if (window.getComputedStyle) { //兼容高版本
            return window.getComputedStyle(ele)[attr];
        } else { //兼容 IE8以下
            return ele.currentStyle[attr];
        }
    }
    

三、DOM高级操作

3.1 节点创建

  • createElement() 创建一个元素节点

  • createTextNode() 创建文本节点

  • createAttribute() 创建属性节点,属性节点通过 nodeValue 或者 value 进行赋值

    属性节点通过借助 setAttributeNode(attr) 方法进行设置

  • createComment() 创建注释节点

3.2 节点操作

  • appendChild() 向指定元素中追加一个子元素节点

  • insertBefore(newNode, oldNode) 向父元素内部指定元素的前面插入一个新的子元素节点

  • replaceChild(newNode, oldNode) 使用新的节点替换父元素内部的原有子节点

  • cloneNode(deep?) 克隆指定节点,参数deep默认false,仅克隆当前节点。设置true,克隆当前及后代所有节点

  • removeChild() 从父元素中删除指定子元素节点

  • remove(index?) 移除指定(索引)节点

    例: 删除下拉列表中选中的菜单项
    ================================== html代码 ================================
    <select id="mySelect">
    function removeOption(){
        <option>苹果</option>
        <option>香蕉</option>
        <option>葡萄</option>
        <option>西瓜</option>
        <option>橙子</option>
    </select>
    <input type="button" onclick="removeOption()" value="移除选中的菜单项"/>
    ================================== js代码 ================================
    function removeOption(){
        var myEle = document.getElementById("mySelect");
        myEle.remove(myEle.selectedIndex);
    }
    小贴士:selectedIndex 属性可设置或返回下拉列表中被选选项的索引号;若允许多重选择,则仅会返回第一个被选选项的索引号	
    

    element.removeAttributeNode(attributename) 删除指定属性节点并返回移除后的节点

  • hasChildNodes() 用来检查当前元素是否含有子节点

四、DOM操作案例

原生JavaScipt案例合集

4.1 选项卡切换

在这里插入图片描述

4.2 评论系统

在这里插入图片描述

4.3 微博评论

在这里插入图片描述

4.4 购物车

在这里插入图片描述

拓展:

xml、json都是用来存储数据,但是xml结构看起来清晰,而json字符串结构不容易查看;但是xml不够简洁,对于计算机来说,json字符串保存数据更经济。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MagnumHou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值