1、selectors API(选择符API)
连个核心的方法:querySelector() 和 querySelectorAll()
其中querySelectorAll返回的是Nodelist的一个实例,是一组带所有属性和方法的Nodelist,但底层类似于Nodelist的一个快照,并不是不短的对Nodelist进行动态查询,在一定程度上避免的因使用Nodelist而造成的性能问题
2、为DOM元素新增了5个API
childElementCount、firstElementChild、lastElementChild、nextElementSibling、previousElementSibling使用这些API不必再担心空白文本节点,可以更加方便的查找和使用DOM元素了
HTML5中与DOM操作相关的扩展
1、getElementByClassName(),该方法接收一个参数 一个或者多个类名 的字符串,返回的是带有指定类的Nodelist,当传入多个类名时,类名的顺序不重要
2、classList
操作DOM元素的class时,需要对className进行相关的设置,因为className是一个字符串,所以即使只修改一个类型,也是要重新设置整个className的
HTML5中新增的API,classList,可以更加方便快捷的操作DOM元素的类名,classList定义了一些相关的方法:
add 增指定类名,如果值已经存在,则不做任何操作
remove 删除指定类名
contains 是否包含指定类名,如果存在返回true,如果不存在返回false
toggle 如果列表中已经存在指定类名,则删除,如果存在则添加到列表中
自定义属性
HTML5规定可以给元素添加非标准属性,但是要加前缀data-,目的是为元素提供与渲染无关的属性,或者语义化的信息。
使用dataset可以获取到DOM元素的DOMStringMap的一个实例,也就是一个名值对的映射
可以使用dom.dataset[key]来获取、修改或者添加DOM元素的data-属性
插入标记
innerHTML
outerHTML
inserteAdjacentHTML
使用innerHTML与先创建DOM元素再指定他们之间的关心相比,性能要优化的多,因为每次使用innerHTML就会先创建一个HTML解析器,这是在在浏览器级别的代码上运行的,不过创建和销毁HTML解析器也是会带来性能损失的,所以在使用这些方法的时候,我们要控制innerHTML的使用次数。同时当我们使用innerHTML来操作的DOM的时候,如果DOM的使用了javascript的对象作为属性,或者有一个时间处理程序,当我们将相关DOM元素从DOM树种删除的时候,并没有删除与javascript对象之间的关系,所以有可能会带来内存不合理的占用的问题
children属性
因IE9 在处理childNodes中的空白文本节点时候与其他浏览器存在差异,故出现了children属性,该属性为HTMLCollection的实例,只包含节点元素的子节点