DOM

DOM:Document Object Model(文本对象模型)

  • D:文档 – html 文档 或 xml 文档
  • O:对象 – document 对象的属性和方法
  • M:模型
  • DOM 是针对xml(html)的基于树的API。
  • DOM树:节点(node)的层次。
  • DOM 把一个文档表示为一棵家谱树(父,子,兄弟)
  • DOM定义了Node的接口以及许多种节点类型来表示XML节点的多个方面

节点及其类型

节点(node):来源于网络理论,代表网络中的一个连接点。网络是由节点构成的集合
<p title="a gentle reminder">Don't forget to buy this suff.</p>

Node接口的特性和方法

查找元素节点

  1. getElementById()

    • 寻找一个有着给定 id 属性值的元素,返回值是一个有着给定 id 属性值的元素节点。如果不存在这样的元素,它返回 null。
      var element = document.getElementById(ID);
    • 该方法只能用于 document 对象
  2. getElementsByTagName()

    • 寻找有着给定标签名的所有元素,这个方法将返回一个节点集合,这个集合可以当作一个数组来处理。这个集合的 length 属性等于当前文档里有着给定标签名的所有元素的总个数。
      var elements = element.getElementsByTagName(tagName);
    • 该方法不必非得用在整个文档上。它也可以用来在某个特定元素的子节点当中寻找有着给定标签名的元素。
      var container = document.getElementById(“content”);
      var paras = container.getElementsByTagName(“p”);
      alert(paras.length);

查看是否存在子节点

hasChildNodes()

  • 该方法用来检查一个元素是否有子节点,返回值是 true 或 false.
    var booleanValue = element.hasChildNodes();
  • 文本节点和属性节点不可能再包含任何子节点,所以对这两类节点使用 hasChildNodes 方法的返回值永远是 false.
  • 如果 hasChildNodes 方法的返回值是 false,则 childNodes,firstChild,lastChild 将是空数组和空字符串。

DOM 属性 – nodeName

文档里的每个节点都有以下属性。
nodeName:一个字符串,其内容是给定节点的名字。
var name = node.nodeName;

  • 如果给定节点是一个元素节点或属性节点,nodeName 属性将返回这个元素的名字。
  • 如果给定节点是一个文本节点,nodeName 属性将返回内容为 #text 的字符串。
    nodeName 是一个只读属性。

DOM 属性 – nodeType

nodeType:返回一个整数,这个数值代表着给定节点的类型。

  • nodeType 属性返回的整数值对应着 12 种节点类型:
    Node.ELEMENT_NODE (1) – 元素节点
    Node.ATTRIBUTE_NODE (2) – 属性节点
    Node.TEXT_NODE (3) – 文本节点
  • nodeType 是个只读属性

DOM 属性 – nodeValue

nodeValue:返回给定节点的当前值(字符串)

  • 如果给定节点是一个属性节点,返回值是这个属性的值。
  • 如果给定节点是一个文本节点,返回值是这个文本节点的
    内容。
  • 如果给定节点是一个元素节点,返回值是 null
  • nodeValue 是一个 读/写 属性,但不能对元素节点的
    nodeValue 属性设置值,但可以为文本节点的 nodeValue
    属性设置一个值。
    var message = document.getElementById(“fineprint”);
    if(message.firstChild.nodeType == 3)
    message.firstChild.nodeValue = “this might work”;

替换节点

replaceChild()

  • 把一个给定父元素里的一个子节点替换为另外一个子节点
    var reference = element.replaceChild(newChild,oldChild);
  • 返回值是一个指向已被替换的那个子节点的引用指针。
  • 如果被插入的子节点还有子节点,则那些子节点也被插入到目标节点中
    var container = document.getElementById(“content”);
    var message = document.getElementById(“fineprint”);
    var announcement = document.getElementById(“headline”);
    var oldmessage = container.replaceChild(announcement,message);
    container.appendChild(oldmessage);

查找属性节点

getAttribute()

  • 返回一个给定元素的一个给定属性节点的值
    var attributeValue = element.getAttribute(attributeName);
  • 给定属性的名字必须以字符串的形式传递给该方法。
  • 给定属性的值将以字符串的形式返回,如果给定属性不存在,getAttribute() 将返回一个空字符串.

设置属性节点

setAttribute()

  • 将给定元素节点添加一个新的属性值或改变它的现有属性的值。
    element.setAttribute(attributeName,attributeValue);
  • 属性的名字和值必须以字符串的形式传递给此方法
  • 如果这个属性已经存在,它的值将被刷新;如果不存在,setAttribute()方法将先创建它再为其赋值。
    var para = document.createElement(“p”);
    para.setAttribute(“id”,”fineprint”);
    var container = document.getElementById(“content”);
    container.appendChild(para);

创建新元素节点

createElement()

  • 按照给定的标签名创建一个新的元素节点。方法只有一个参数:将被创建的元素的名字,是一个字符串.
    var reference = document.createElement(element);
  • 方法的返回值:是一个指向新建节点的引用指针。返回值是一个元素节点,所以它的 nodeType 属性值等于 1。
  • 新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性,它只是一个存在于 JavaScript 上下文的对象.
    var oP = document.createElement(“p”);

创建新文本节点

createTextNode()

  • 创建一个包含着给定文本的新文本节点。这个方法的返回值是一个指向新建文本节点引用指针。
    var reference = document.createTextNode(text);
  • 方法只有一个参数:新建文本节点所包含的文本字符串
  • 方法的返回值:是一个指向新建节点的引用指针。它是一个文本节点,所以它的 nodeType 属性等于 3.
  • 新元素节点不会自动添加到文档里,新节点没有 nodeParent 属性
    var oText = document.createTextNode(“Hello World”);

插入节点(1)

appendChild()

  • 为给定元素增加一个子节点:var reference = element.appendChild(newChild).
    给定子节点 newChild 将成为给定元素节点 element 的最后一个子节点。
  • 方法的返回值是一个指向新增子节点的引用指针。
  • 该方法通常与 createElement() createTextNode() 配合使用
    var para = document.createElement(“p”);
    var message = document.createTextNode(“Hello World”);
    para.appendChild(message);
    document.body.appendChild(para);
  • 新节点可以被追加给文档中的任何一个元素

插入节点(2)

insertBefore()

  • 把一个给定节点插入到一个给定元素节点的给定子节点的前面
    var reference = element.insertBefore(newNode,targetNode);
    节点 newNode 将被插入到元素节点 element 中并出现在节点 targetNode 的前面.
  • 节点 targetNode 必须是 element 元素的一个子节点。
  • 该方法通常与 createElement() 和 createTextNode() 配合使用
    var container = document.getElementById(“content”);
    var message = document.getElementById(“fineprint”);
    var para = document.createElement(“p”);
    container.insertBefore(para,message);

插入节点(3)

DOM 没有提供 insertAfter() 方法

删除节点

removeChild()

  • 从一个给定元素里删除一个子节点
    var reference = element.removeChild(node);
  • 返回值是一个指向已被删除的子节点的引用指针。
  • 某个节点被 removeChild() 方法删除时,这个节点所
    包含的所有子节点将同时被删除。
    var container = document.getElementById(“content”);
    var message = document.getElementById(“fineprint”);
    container.removeChild(message);
  • 如果想删除某个节点,但不知道它的父节点是哪一个,parentNode 属性可以帮忙。
    var message = document.getElementById(“fineprint”);
    var container = message.parentNode;
    container.removeChild(message);

遍历节点树

ChildNodes:返回一个数组,这个数组由给定元素节点的子节点构成:
var nodeList = node.childNodes;

  • 文本节点和属性节点都不可能再包含任何子节点,所以它们的 ChildNodes 属性永远会返回一个空数组。
  • 如果想知道某个元素有没有子节点,可以用 hasChildNodes 方法。
  • 如果想知道某个元素有多少个子节点,可以用 childNodes 数组的 length 属性。
  • childNodes 属性是一个只读属性。

获取第一个子节点

firstChild:该属性返回一个给定元素节点的第一个子节点,返回这个节点对象的指针。
var reference = node.firstChild;

  • 文本节点和属性节点都不可能包含任何子节点,所以它们的 firstChild 属性永远会返回 null。
  • 某个元素的 firstChild 属性等价于这个元素的 childNodes 节点集合中的第一个节点,即:
    var reference = node.ChildNodes[0];
  • firstChild 属性是一个只读属性。

获取最后一个子节点

  • lastChild:对应 firstChild 的一个属性。
  • nextSibling: 返回一个给定节点的下一个子节点。
  • parentNode:返回一个给定节点的父节点。
    • parentNode 属性返回的节点永远是一个元素节点,因为只有元素节点才有可能包含子节点。
    • document 节点的没有父节点。
  • previousSibling:返回一个给定节点的上一个子节点

innerHTML属性

浏览器几乎都支持该属性,但不是 DOM 标准的组成部分。
innerHTML 属性可以用来读,写某给定元素里的 HTML 内容。
代码1:

var testdiv = document.getElementById("testdiv");
alert(testdiv.innerHTML);

代码2:

var testdiv = document.getElementById("testdiv");
testdiv.innerHTML = "<p>I inserted<em>this</em> content.</p>";

尚硅谷_JS DOM编程_学习笔记相关推荐

  1. 尚硅谷JavaWeb_2020idea_王振国_学习笔记

    文章目录 基本操作 阶段一.使用JS正则表达式检查输入 阶段二.实现登陆和注册功能 阶段三.做一些优化 阶段四.使用EL**表达式修改表单回显** 阶段五.图书模块 阶段五.下.分页的实现 阶段六.登 ...

  2. 【Vue实践】尚硅谷张天禹Vue学习笔记(087-135)-20221212~20221218

    (任意组件通信)084-086_全局事件总线 全局事件总线SOP 086_TodoList案例_事件总线 src/mian.js: import Vue from 'vue' import App f ...

  3. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 -高级与场景整合篇

    SpringBoot 2.x 场景整合 在上一篇核心功能篇里,我们已了解SpringBoot的配置文件.web开发.数据访问.JUnit5单元测试.生产指标监控.SpringBoot启动流程等.然而S ...

  4. python aop编程_学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头     系统--房子 类--细胞     系统--人 面向对象是非常适合做大型 ...

  5. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  6. JavaScript Dom编程艺术学习笔记(第4章)

    案例研究:JavaScript图片库(待补充) (笔记并不覆盖章节所有内容,只记录个人认为的重点和难点) 一.DOM操作 placeholder.setAttribute("src" ...

  7. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 基础入门篇

    SpringBoot 2.x 时代 – 基础入门篇 视频学习地址:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112&spm_id_from=p ...

  8. 【尚硅谷】Vue2.x核心学习笔记--渐进式的JS框架

    Vue核心 在这里插入图片描述 一.Vue的基本认识 1.1 Vue特点 1.2 与其他的前端Js框架的关联 1.3 Vue的扩展插件 二.Vue的基本使用 2.1 效果 2.2 如何引入Vue.js ...

  9. java马士兵网络编程_学习笔记-马士兵java - 网络编程

    1. 网络基础 a. 计算机网络:把分布在不同地理区域的计算机与专门的外部设备用通信线路互联成一个规模大.功能强的网络系统,从而使众多的计算机可以方便地相互传递信息,共享硬件.软件.数据信息等资源. ...

最新文章

  1. iOS通过Plist保存离线调试日志
  2. Fedora下配置网卡
  3. 如何解决资料下载下来为index.html和PHP文件的问题?
  4. (How to) Call somatic mutations using GATK4 Mutect2
  5. 二叉树 跳表_漫谈 LevelDB 数据结构(一):跳表(Skip List)
  6. realm android,Realm for Android快速入门教程
  7. 拓端tecdat|R语言拟合扩展的Rasch模型分析试题质量
  8. 最全NISP二级习题汇总
  9. 关于jmeter客户端实现中HttpClient4与Java的区别
  10. Prometheus 实战于源码分析之webHandler
  11. 复习汇总vue知识点
  12. 今天是没有python的一天(大物实验‘利用牛顿环测量曲率半径’报告和大物复习)
  13. 机器学习入门-西瓜书总结笔记
  14. win7降低屏幕亮度_Win7电脑屏幕亮度怎么调?Win7调节屏幕亮度的步骤
  15. Java 中对象数组的简单存入与取出
  16. multiple definition of `main'
  17. pytorch MSELoss参数详解
  18. 打开android模拟器但是as不识别,android studio连接雷电模拟器 【AS 模拟器】
  19. 【读书笔记】打开心智
  20. 学术前沿趋势分析(一)

热门文章

  1. windows7开启虚拟wifi和虚拟无线AP的方法
  2. Android SqliteManager 源码
  3. NoClassDefFoundError: org/apache/flink/metrics/MetricGroup
  4. flink的web ui中五颜六色的方块是什么意思?
  5. nginx搭建静态服务器(127.0.0.1/localhost访问)
  6. awk输出最后一列的命令
  7. ubuntu16.04下面的redis desktop manger的使用
  8. OpenGL:着色器shader
  9. c语言经典编程案例猜数字,用c语言编程猜数字
  10. linux mode4的双网卡绑定,Linux实现双网卡绑定自动化脚本 | 聂扬帆博客