这个命名跟上面一样,我们基本可以知道 API 的作用。这几个 API 的设计可以说是饱受诟病。其中最主要的批评是它不对称——只有 before,没有 after,而 jQuery 等框架都对其做了补充。
实际上,appendChild 和 insertBefore 的这个设计,是一个“最小原则”的设计,这两个 API 是满足插入任意位置的必要 API,而 insertAfter,则可以由这两个 API 实现出来。
可能正是这个原因,搞得当时做 WebNote,发现一些基础的功能,并没有 API 提供,需要自己实现,真是累觉不爱
Node 提供了树形结构上节点相关的操作。而大部分时候,我们比较关注的是元素。Element 表示元素,它是 Node 的子类。
但是有些操作,必须使用 node,比如之前做的 WebNote,必须使用 node 操作才行
而 getElementsByName、getElementsByTagName、getElementsByClassName 获取的集合并非数组,而是一个能够动态更新的集合。
var collection = document.getElementsByClassName('winter');
console.log(collection.length);
var winter = document.createElement('div');
winter.setAttribute('class', 'winter')
document.documentElement.appendChild(winter)
console.log(collection.length);
这有什么牛逼的,反人类的设计
遍历
总的来说,我个人不太喜欢 TreeWalker 和 NodeIterator 这两个 API,建议需要遍历 DOM 的时候,直接使用递归和 Node 的属性。
白看了,还以为有多好的方法可以用,晕
Range
说是很强,举了选中的例子
最后,我给你留了一个题目,请你用 DOM API 来实现遍历整个 DOM 树,把所有的元素的 tagName 打印出来。
很多答案很牛逼