- 创建新节点的方法:
document.createElement(tag)— 用给定的标签创建一个元素节点,document.createTextNode(value)— 创建一个文本节点(很少使用),elem.cloneNode(deep)— 克隆元素,如果deep==true则与其后代一起克隆。
插入和移除节点的方法:
node.append(...nodes or strings)— 在node末尾插入,node.prepend(...nodes or strings)— 在node开头插入,node.before(...nodes or strings)— 在node之前插入,node.after(...nodes or strings)— 在node之后插入,node.replaceWith(...nodes or strings)— 替换node。node.remove()— 移除node。
文本字符串被“作为文本”插入。
这里还有“旧式”的方法:
parent.appendChild(node)parent.insertBefore(node, nextSibling)parent.removeChild(node)parent.replaceChild(newElem, node)
- 这些方法都返回
node。 - 在
html中给定一些 HTML,elem.insertAdjacentHTML(where, html)会根据where的值来插入它:"beforebegin"— 将html插入到elem前面,"afterbegin"— 将html插入到elem的开头,"beforeend"— 将html插入到elem的末尾,"afterend"— 将html插入到elem后面。
另外,还有类似的方法,elem.insertAdjacentText 和 elem.insertAdjacentElement,它们会插入文本字符串和元素,但很少使用。
- 要在页面加载完成之前将 HTML 附加到页面:
document.write(html)
- 页面加载完成后,这样的调用将会擦除文档。多见于旧脚本。
练习题
1. 创建一个列表
编写一个接口,根据用户输入创建一个列表(list)。
对于每个列表项:
- 使用
prompt向用户询问列表项的内容。 - 使用用户输入的内容创建
<li>,并添加到<ul>。 - 重复以上步骤,直到用户取消输入(按下 Esc 键,或点击
prompt弹窗的 CANCEL 按钮)。
所有元素应该都是动态创建的。
如果用户输入了 HTML 标签,那么这些内容应该被视为文本进行后续处理。
<!DOCTYPE HTML><html><body><h1>Create a list</h1><script>let ul = document.createElement('ul');document.body.append(ul);while (true) {let data = prompt("请输入", "");if (!data) {break;}let li = document.createElement('li');li.textContent = data;ul.append(li);}</script></body></html>
2. 从对象创建树
let data = {"Fish": {"trout": {},"salmon": {}},"Tree": {"Huge": {"sequoia": {},"oak": {}},"Flowering": {"apple tree": {},"magnolia": {}}}};function createTreeDom(obj){// Object.keys得到由key组成的数组if(!Object.keys(obj).length) returnlet ul = document.createElement('ul')for(key in obj){let li = document.createElement('li')li.innerHTML = keylet childUl = createTreeDom(obj[key])if(childUl){li.append(childUl)}ul.append(li)}return ul}function createTree(container, obj){container.append(createTreeDom(obj))}createTree(document.body, data)
