添加: 3步:
1. 创建新的空元素:
var a=document.createElement("a");
相当于: <a></a>
2. 设置元素的关键属性:
a.href="http://tmooc.cn"
a.innerHTML="go to tmooc";
相当于: <a href="http://tmooc.cn">go to tmooc</a>
3. 将元素添加到DOM树上:
3种:
1. 末尾追加: parent.appendChild(a)
2. 插入在一个现有元素之前:
parent.insertBefore(a,oldElem)
3. 替换现有元素: parent.replaceChild(a,oldElem)
***页面加载过程:
html->DOM Tree
↓
Render Tree->***layout->paint
↑
css->CSSRules
结论: 只要修改DOM树的内容,都会导致重新layout
解决: 优化: 尽量少的操作DOM树
1. 如果同时添加父元素和子元素时,都要先将子元素添加到父元素,再将父元素整体添加到DOM树一次即可
2. 如果同时添加多个平级元素时,都要用文档片段
文档片段: DocumentFragment
内存中临时存放多个平级元素的虚拟的临时父元素
何时: 如果同时添加多个平级元素时,都要先将平级元素添加到文档片段中。再将文档片段一次性添加到DOM树
如何:
1. 创建文档片段:
var frag=document.createDocumentFragment();
2. 将子元素添加到frag中: frag.appendChild(child)
3. 将frag添加到DOM树: parent.appendChild(frag)
frag将子元素添加到DOM树后,自动释放。
删除元素: 1. 先找到要删除的元素对象elem
2. parent.removeChild(elem)
elem.parentNode.removeChild(elem);