几个常见功能重合 DOM API 的细节差异

119 阅读1分钟

①innerText 对比 textContent:
innerText 获取的文字的换行符依然保留,在 HTML 中,如果 white-space 不是 pre 或 pre-wrap 则会表现为空格;
display:none 元素是无法使用 innerText 获取的,但是 textContent 却可以,无论元素隐藏与否;
innerText 性能要相对差一些;
innerText 只有 HTML 元素才可以调用,但是 textContent 任意 Node 节点都可以:HTMLElement.innerText 和 Node.textContent;
如果你要在一个 DOM 元素中改变文字内容,推荐使用 textContent,而不是 innerHTML,性能会更高一点;
②getAttribute 对比 dataset 对象:
getAttribute 方法是无视大小写的;
如果自定义属性包含多个词组,则 dataset 对象属性值需要使用驼峰命名获取,且只能使用驼峰命名方法;
③getElementById 对比 querySelector:
getElementById () 方法,因为这个 API 的容错性最强,不容易导致 JS 运行中断;
在使用 querySelector () 方法的时候,我们需要对里面的选择器进行合法性校验,或者 try…catch 处理,否则就会影响整个 JavaScript 代码的运行;
④append 对比 appendChild:
append () 方法可以一次 append 多个元素,appendChild 方法只能一次 append 一个元素;
append () 方法还可以 append 字符串(会自动 HTML 转义);
⑤scrollIntoView 对比 scrollIntoViewIfNeeded:
如果元素已经在视区了,则 scrollIntoViewIfNeeded () 方法执行的时候,页面是不会滚动定位的;
scrollIntoView () 支持设置滚动定位的时候是否是平滑滚动,参数是 smooth,scrollIntoViewIfNeeded () 的滚动定位只能是硬邦邦的效果;
scrollIntoView () 支持精准设置定位的元素是定位到视区的上方、下方还是中间,scrollIntoViewIfNeeded () 的定位位置就比较粗糙,无法精确,只支持一个 Boolean 参数值,true 表示居中,false 表示或上边缘或下边缘;
(参考:www.zhangxinxu.com/wordpress/2…