<ul id="myList"></ul>
假设想给这个
-
元素添加 3 个列表项。如果分 3 次给这个元素添加列表项,浏览器就要重新渲染 3 次页面,以反映新添加的内容。为避免多次渲染,下面的代码示例使用文档片段创建了所有列表项, 然后一次性将它们添加到了
- 元素:
let fragment = document.createDocumentFragment();
let ul = document.getElementById("myList");
for (let i = 0; i < 3; ++i) { 3 let li = document.createElement("li");
li.appendChild(document.createTextNode(`Item ${i + 1}`));
fragment.appendChild(li);
}
ul.appendChild(fragment);
这个例子先创建了一个文档片段,然后取得了
- 元素的引用。接着通过 for 循环创建了 3 个列表 项,每一项都包含表明自己身份的文本。为此先创建
- 元素,再创建文本节点并添加到该元素。然后 通过 appendChild()把
- 元素添加到文档片段。循环结束后,通过把文档片段传给 appendChild() 将所有列表项添加到了
-
元素。此时,文档片段的子节点全部被转移到了
- 元素。
-
元素。此时,文档片段的子节点全部被转移到了
Attr类型
元素数据在 DOM 中通过 Attr 类型表示。Attr 类型构造函数和原型在所有浏览器中都可以直接访 7 问。技术上讲,属性是存在于元素 attributes 属性中的节点。Attr 节点具有以下特征:
nodeType 等于 2;
nodeName 值为属性名; 8 nodeValue 值为属性值;
parentNode 值为 null;
在 HTML 中不支持子节点;
在 XML 中子节点可以是 Text 或 EntityReference。
属性节点尽管是节点,却不被认为是 DOM 文档树的一部分。Attr 节点很少直接被引用,通常开
发者更喜欢使用 getAttribute()、removeAttribute()和 setAttribute()方法操作属性。
Attr 对象上有 3 个属性:name、value 和 specified。其中,name 包含属性名(与 nodeName 一样),value 包含属性值(与 nodeValue 一样),而 specified 是一个布尔值,表示属性使用的是
默认值还是被指定的值。
可以使用 document.createAttribute()方法创建新的 Attr 节点,参数为属性名。比如,要给
元素添加 align 属性,可以使用下列代码:
let attr = document.createAttribute("align");
attr.value = "left";
element.setAttributeNode(attr);
alert(element.attributes["align"].value); alert(element.getAttributeNode("align").value); // "left" alert(element.getAttribute("align")); // "left"
// “left”
在这个例子中,首先创建了一个新属性。调用 createAttribute()并传入"align"为新属性设置 .