16 DOM2DOM3

91 阅读4分钟

对DOM API的按模块拓展(比如对样式、事件的操作)。但是很多都是增加对xml的操作,本章只会记录对HTML操作的补充

1.节点操作

Node的变化

  • isSameNode(节点变量):判断是否指向同一个节点
  • isEqualNode(节点变量):判断两个节点是否有相同类型、属性以及childNodes(其实就是从Node类型继承的属性都要相等)
  • contentDocument属性:iframe元素对应的节点上添加的属性,指向iframe中的内容的document对象

2.样式

html元素引入样式的方法有:style属性、style标签和link标签,所以主要就是对这几个进行操作;元素的样式(内联、内部或外部)在js中都存储为CSSStyleDeclaration对象,可进行操作;元素最终样式是通过引入的样式计算得来的,所以操作的样式位置不对可能会导致样式不起作用

2.1Element的变化

增加style属性对象

元素的style属性中的值存储在对应Element节点中的style属性中,该属性值为CSSStyleDeclaration

属性
  • css属性在Element节点的style对象上都有对应的属性,如color;但是对特殊的名字有差别:
    • 不是驼峰命名:css中的font-size在DOM的style属性中为fontSize
    • float:在js中为保留字,改为cssFloat
  • cssText:包含标签属性style中的CSS代码,可读可写,写是覆盖写
  • length:已设置CSS属性的数量
  • parentRule
方法

后续属性名都是属性字符串,如"background-color",而不会改为驼峰写法

  • getPropertyValue/getPropertyCSSValue(属性名):前者获取属性值字符串,后者获取CSSValue对象
    • cssText:属性值字符串
    • cssvalueType:0继承,1原始值,2列表,3代表自定义
  • getPropertyPriority(属性名):如果属性设置了!important,则返回important,否则为空字符串
  • item(index):获取对应属性名(字符串),也可以使用中括号访问
  • removeProperty(属性名):删除样式
  • setProperty(特征名,值,priority):设置属性的值、优先级,优先级只能是‘important’或空字符串

2.2document的变化

link和script标签引入的所有样式表,全部存在document对象属性styleSheets上,值为StyleSheetList对象,其中元素为只读的CSSStyleSheet对象,每个link和script对应的element节点上存储着导入的样式表,暴露为sheet属性,而CSSStyleSheet对象中又有多条规则,存储在cssRules属性中

2.2.1 CSSStyleSheet对象(样式表)

属性
  • disabled:Boolean值,表示样式表是否被禁用(唯一可修改的值)
  • href:link返回对应的值,style返回null
  • media
  • ownerNode:标记样式表来源于Style还是link
  • parentStyleSheet:如果当前样式表是通过@import被包含在另一个样式表中,则这个值指向导入它的样式表
  • title:ownerNode的title属性
  • type:text/css
  • cssRules:当前样式表包含的样式规则的集合,元素为CSSRule类型实例
  • ownerRule:如果样式表是使用@import导入,则指向导入规则,否则为null
方法
  • deleteRule(index):在指定位置删除cssRules中的规则
  • insertRule(rule,index):在指定位置向cssRules中插入规则

2.2.2 cssRule类型实例(规则)

属性
  • cssText:整条规则的文本:选择器,样式属性名和值
  • parentRule
  • parentStyleSheet:包含当前规则的样式表
  • selectorText:返回选择符文本
  • style:返回CSSStyleDeclaration对象,和属性style一样
  • type:规则类型,样式规则为1

综上,要想访问到样式表中第一条样式表中的第一条规则的CSSStyleDeclaration对象,需要:document.styleSheets\[0].cssRules[0].style

2.2.3计算样式

此样式此时元素最终表现出来的样式,也是CSSStyleDeclaration类型,不可以修改,通过document.defaultView.getComputedStyle(元素节点,伪元素字符串),其中元素节点可以使用之前方法获得,伪元素字符串为:':after'等

3.元素尺寸

3.1 偏移尺寸

偏移尺寸都是参照的包含元素,包含元素不一定是父元素,包含元素必须能提供尺寸;如果需要知道相对于页面的偏移,则需要递归向上相加,直到根节点

  • Element中的偏移属性 image.png
    • offsetParent:指向包含元素,注意包含元素不一定是父元素

3.2 客户端尺寸

元素都有客户端尺寸,此尺寸为内容占据大小+内边距,不包括滑动条大小 image.png

  • 视口大小:html元素的客户端大小document.documentElement.clientWidth以及height

3.3 滚动尺寸

个人认为就是元素内部内容大小,所以是包含内容的元素上调用下面的属性 image.png

  • scrollLeft和scrollTop用于设置视口在内容上的位置,内容向上滚动,则top>0,向右滚则left>0;如果两者设置为0,则是重置位置

3.4 元素尺寸

使用getBoundingClientRect()方法,获得元素在视口上的位置尺寸,返回一个DOMRect对象,包含6个属性:left、top、right、bottom、height和width: image.png

遍历

在DOM树上进行遍历,NodeIterator和TreeWalker类型对树进行深度遍历,具体用法后续再描述

范围

对DOM树特定部分进行操作的一种方式