var $ele = document.querySelector(".ele");
// before
$ele.style.borderLeft = "1px";
$ele.style.borderRight = "2px";
$ele.style.padding = "5px";
// 大多数现代浏览器对上面代码进行了优化,但是老版浏览器可能导致严重的性能问题
// after
$ele.style.cssText = "border-left: 1px; border-right: 2px; padding: 5px;"; // 一次性修改
// or
$ele.className = "newClass";
批量修改元素
基本思路:
让该元素脱离文档流
对其进行多重改变
将元素带回文档中
隐藏元素,进行修改后,然后再显示该元素
function appendNode($node, data) {
var a, li;
for (let i = 0, max = data.length; i < max; i++) {
a = document.createElement("a");
li = document.createElement("li");
a.href = data[i].url;
a.appendChild(document.createTextNode(data[i].name));
li.appendChild(a);
$node.appendChild(li);
}
}
// before
let ul = document.querySelector("#mylist");
appendNode(ul, data);
// after
let ul = document.querySelector("#mylist");
ul.style.display = "none";
appendNode(ul, data);
ul.style.display = "block";
使用文档片段创建一个子树,然后再拷贝到文档中
let fragment = document.createDocumentFragment();
appendNode(fragment, data);
ul.appendChild(fragment);
将原始元素拷贝到一个独立的节点中,操作这个节点,然后覆盖原始元素
let old = document.querySelector("#mylist");
let clone = old.cloneNode(true);
appendNode(clone, data);
old.parentNode.replaceChild(clone, old);