1、Selectors API
1、querySelector()
-
接收css选择符参数,返回匹配该模式的第一个后代元素,没有匹配返回null
-
在Doument上使用,会从文档元素开始搜索,在Element上使用会从当前元素后代中查询。
2、querySelectorAll()
- 接收css选择符参数,返回匹配该模式的所有匹配节点,而不止一个。
- 返回的是一个NodeList的静态实例
- 可以在Document,DocumentFragment和Element类型上使用。
- 语法错误或不支持的选择符会抛出错误。
3、matches()
- 接收css选择符参数,如果元素匹配则该选择符返回true,否则返回false
- 可以方便检测某个元素会不会被前面两个方法返回。
2、元素遍历
childElementCount
,返回子元素数量(不含文本节点和注释)firstElementChild
,指向第一个Element类型的子元素lastElementChild
,指向最后一个Element类型的子元素previousElementSibling
,指向前一个Element类型的同胞元素nextElementSibling
,指向后一个Element类型的子元素
3、HTML5
1、CSS类扩展
1、getElementsByClassName()
- 接收一个参数,包含一个或多个类名字符串,返回类名中包含相应类的NodeList
2、classList属性 🌟
- 操作类名,可以通过className属性实现添加、删除和替换。但className是一个字符串,每次操作需要重新设置这个值才能生效。
- HTML5给所有元素添加了
classList
属性,为这些操作提供了更简单安全的实现方式。 classList
是一个新的集合类型DOMTokenList的实例,length属性表示包含多少项,也可通过item() 或 中括号取得个别的元素add(value)
,向类名列表添加指定字符串值value,如果已存在什么都不做contains(value)
,返回布尔值,表示给定的value是否存在。remove(value)
,从类名列表中删除指定的字符串值valuetoggle(value)
,如果类名中已存在value,则删除;如果不存在则添加
- IE10 及以上版本和其他主流浏览器都支持
2、焦点管理
document.activeElement
包含当前拥有焦点的DOM元素document.hasFocus()
文档是否拥有焦点
3、HTMLDocument扩展
1、readyState属性
document.readyState
loading
文档正在加载complete
文档加载完成
- 之前需要依赖onload事件处理程序设置标记
2、compatMode 属性
document.compatMode
浏览器渲染模式CSS1Compat
标准模式BackCompat
混杂模式
3、head属性
document.head
执行<head>
元素
4、字符集属性
document.characterSet
表示实际使用的字符集- 默认'UTF-16',可以通过
<meta>
元素或者这个属性修改。
- 默认'UTF-16',可以通过
5、自定义数据属性
- 使用前缀
data-
- 可以通过元素的
dataset
属性来访问。 - 该属性是一个DOMStringMap实例,包含一组键值对。
data-name
后面的name作为键来访问,但data-my-name
,data-My-Name
要通过myName
来访问
6、插入标记
1、innerHTML属性
- 读取时,但会元素所有后代的HTML字符串,包括元素、注释和文本节点。
- IE、Opera会把标签转为大写
- 其他会按源代码格式返回
- 写入时,会根据提供的字符串以新的DOM子树代替元素中原来包含的子节点。
- 会被解析为DOM子树,并替换元素之前的所有节点。
- 如果赋值内容不包含任何HTML标签,则会直接生成文本节点
- 会转义
2、旧IE的innerHTML
- 旧版IE插入
<script>
标签指定defer属性,需要在之前加入“受控组件”。 - 可以通过插入
<input type='hidden'>
处理 <style>
也有类似问题
3、outerHTML属性
- 读取时,会返回调用它的元素(及所有后代元素)的HTML字符串
- 写入时,调用它的元素会被传入的HTML字符串经过解释之后生成的DOM子树取代
4、insertAdjacentHTML() 与 insertAdjacentText()
- 都接收两个参数
- 要插入标记的位置,不区分大小写
beforebegin
,插入当前元素前面,作为前一个同胞节点afterbegin
,插入当前元素内部,作为新的子节点或放在第一个子节点前面beforeend
,插入当前元素内部,作为新的子节点后放在最后一个子节点后面afterend
,插入当前元素后面,作为下一个同胞节点
- 要插入的HTML或文本
- 要插入标记的位置,不区分大小写
5、内存与性能问题
- 手动删除要被替换掉元素上关联的事件处理程序和JavaScript对象
- 尽量限制频繁设置innerHTML
6、跨站点脚本
- innerHTML不会执行
<script>
标签,但暴露了攻击面,因为可以通过它毫不费力地创建元素并执行onclick之类操作。 - 需要用户提供信息不要使用innerHTML,会有XSS攻击,需要进行转义。
7、scrollIntoView()
- 如何滚动页面的某个区域?控制滚动方式
scrollIntoView()
方法可以滚动浏览器窗口以便包含元素进入视口alignToTop
- true 窗口滚动后元素顶部与视口顶部对齐
- false 窗口滚动后元素底部与视口底部对齐
scrollIntoViewOption
选择对象behavior
:定义过渡动画,smooth/auto , 默认autoblock
:定义垂直方向对齐,start/center/end/nearest,默认startinline
:定义水平方向对齐,start/center/end/nearest,默认nearest
- 不传参数等同于
alignToTop
值为true
- 可以用来在页面上发生某个事件时引起用户关注。把焦点设置到一个元素上也会导致浏览器将元素滚动到可见位置。
4、专有扩展
1、children属性
- HTMLCollection集合,只包含Element类型的子节点。
2、contains()方法
-
contains()
确定一个元素是不是另一个元素后代document.documentElement.contains(document.body)
-
compareDocumentPosition()
确定两个节点间的关系
3、插入标记
1、innerText属性
- 对应元素内包含的所有文本内容,无论文本在子树的哪个层级。
- 读取时,会按深度优先的顺序将子树中所有文本节点的值拼接起来
- 写入时,会移除元素所有后代并插入一个包含该值的文本节点。
- 可以用来去除HTML标签
2、outerText属性
- 范围包含调用它的节点
- 读取时,和innerText一样
- 写入时,会替换整个元素
4、滚动
scrollIntoViewIfNeeded(opt_center)
会在元属不可见的情况下,将其滚动到窗口或包含窗口中。- 如果为true,则元素将在其所在滚动区的可视区域中居中对齐(默认)。
- 如果为false,则元素将与其所在滚动区的可视区域最近的边缘对齐。