对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中的偏移属性
- offsetParent:指向包含元素,注意包含元素不一定是父元素
3.2 客户端尺寸
元素都有客户端尺寸,此尺寸为内容占据大小+内边距,不包括滑动条大小
- 视口大小:html元素的客户端大小
document.documentElement.clientWidth以及height
3.3 滚动尺寸
个人认为就是元素内部内容大小,所以是
包含内容的元素上调用下面的属性
- scrollLeft和scrollTop用于设置视口在内容上的位置,内容向上滚动,则top>0,向右滚则left>0;如果两者设置为0,则是重置位置
3.4 元素尺寸
使用getBoundingClientRect()方法,获得元素在视口上的位置尺寸,返回一个DOMRect对象,包含6个属性:left、top、right、bottom、height和width:
遍历
在DOM树上进行遍历,NodeIterator和TreeWalker类型对树进行深度遍历,具体用法后续再描述
范围
对DOM树特定部分进行操作的一种方式