DOM

正课:
1. 什么是DOM
2. ***DOM树
3. 查找元素


1. 什么是DOM: Document Object Model
      专门操作网页内容的API
      W3C DOM标准 浏览器厂商实现DOM标准
  DHTML: 一切实现网页动态效果的技术的统称
    HTML+CSS+JavaScript
  鄙视题: HTML XHTML DHTML XML
    HTML: 专门编写网页内容的语言
    XHTML: 严格的HTML标准
    DHTML: 所有实现网页动态效果的技术的统称
    XML: 可扩展的标记语言——可自定义标签名的标记语言
    <student>
<name>范冰冰</name>
<math>89</math>
<chs>65</chs>
<eng>95</eng>
    </student>
    被json代替: JavaScript Object Notation
"{'name':"范冰冰",'math':89,'chs':65,'eng':95}"


 DHTML模型: 
   BOM: Browser Object Model
专门操作浏览器窗口的API
没有标准,所以,用的很少
   DOM: Document Object Model
专门操作网页内容的API
W3C DOM标准 浏览器厂商几乎100%实现DOM标准


 DOM: 本来是可以操作一切结构化文档: HTML和XML
    核心DOM: 可操作一切结构化文档的API
万能! 但API繁琐!
增 删 改 查
    HTML DOM: 专门操作网页内容的API
   其实是基于核心DOM的简化版本。
API简洁! 仅对复杂HTML元素提供了简化——不是万能
改  复杂元素:增加和删除
    实际开发: 优先使用HTML DOM,
      HTML DOM实现不了的,用核心DOM补充


2. ***DOM Tree: 保存所有网页内容的树形结构
   网页中每个内容(元素,文本,属性...)都是树上的节点
  网页加载过程: 
  html代码-DOM Tree
 |
 Rander Tree-计算布局和位置-paint
 |              (layout)
  css代码-cssRules
  DOM Tree的加载过程: 
    1. 在开始加载网页内容前,先创建document节点
document节点是整棵DOM树的树根
查找,创建
    2. 顺序读取网页内容,在document节点下,追加子节点
  
  每个节点都是一个对象: Node
    三大属性: 
      nodeType: 描述节点的类型,一个数值
DOCUMENT_NODE: 9
ELEMENT_NODE: 1
ATTRIBUTE_NODE: 2
TEXT_NODE: 3
何时使用: 判断节点类型
      nodeName: 描述节点的名称
document节点: #document
*元素节点: 标签名 ——全大写!
属性节点: 属性名
*文本节点: #text
何时使用: 判断节点的名称时
      nodeValue:描述节点的内容
document节点: null
元素节点: null
*文本节点: 文本内容
*属性节点: 属性值
   课堂练习: 
     元素节点: span->HTMLSpanElement
   ->HTMLElement
   ->Element
   ->Node
     属性节点: id->Attr->Node


  节点间关系: 
    1. 父子: 
parentNode childNodes firstChild lastChild
    2. 兄弟: previousSibling nextSibling
   强调: 除parentNode外,其余都会受到空字符的干扰


****遍历节点树: 对每个子节点执行相同的操作
   递归: 函数内,又调用了自己
     何时使用: 遍历不确定层级深度的树形结构时 
   如何实现递归:
     1. 先实现遍历直接子节点的方法:
      强调: childNodes是动态集合
动态集合: 不保存完整的节点属性,只保存节点的位置
只要访问动态集合,都会导致重新查找DOM树
 优: 快速返回查找结果
 缺: 每次访问动态集合,都重新查找——效率低
遍历时: 都要先将length属性存在变量中
     2. 对每个子节点,再执行和父节点相同的操作!


   算法: 深度优先!优先遍历当前节点的子节点
 子节点遍历完,才跳到兄弟节点


   递归 vs 循环
   1. 递归: 优:直观,易用
    缺:占用更多资源,效率低
   2. 循环: 优: 几乎不占资源,效率高!
    缺: 难度高,代码量大


   递归中获得当前函数本身: arguments.callee

















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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值