通过Javascript操作HTML控件时的良好做法
Good practice when manipulating HTML controls via Javascript
操作HTML控件的好方法是什么?
通过创建HTML元素?
var select = document.getElementById("MyList");
var options = ["1", "2", "3", "4", "5"];
for (var i = 0; i < options.length; i++) {
var opt = options[i];
var el = document.createElement("option");
el.Text = opt;
el.value = opt;
el.innerHTML = opt;
select.appendChild(el);
}
或者通过操纵HTML:
var options = new Array(2);
options [0] = '1';
options [1] = '2';
options [0] = '<option>' + options [0] + '</option>';
options [1] = '<option>' + options [1] + '</option>';
var newHTML = '<select>' + options [0] + options [1] + '</select>';
selectList.innerHTML = newHTML;
以下哪一项是好的练习?在特定条件下,一个比另一个更受欢迎吗?
第一种方法看起来更加模块化和可重用。您可能希望将行放在方法中的for循环中,然后调用该方法。
总是第一种方法。若您使用的是innerhtml样式,那个么浏览器就是在创建自己。
第一种方法比第二种方法更好,即
**创建HTML元素比操作DOM""要好
原因:使用DOM会导致浏览器回流
例如:假设您需要将一个元素替换为已经存在的DOM。
使用方法:
-
创建DOM元素:创建一个元素。向它添加真实的属性并替换它。元素将一次性添加,并且文档只有一次回流
-
操作DOM:您需要逐个添加和删除属性或元素。此可能会导致浏览器触发正在操作的所有元素和属性的回流在处理元素时,这将占用呈现文档流的宝贵资源
因此,创建dom元素要顺畅得多,因为浏览器不必再次呈现文档流。
*EDIT:*如果需要插入多个元素,则最好的方法是创建文档片段。文档片段在内存中,而不是DOM树的一部分。因此,向其添加元素不会导致回流。正如文件所说:
由于文档片段在内存中,而不是主DOM树的一部分,因此向其附加子项不会导致页面回流(计算元素的位置和几何结构)。因此,使用文档片段通常可以获得更好的性能。
相关文章:
- 通过javascript操作图像,非常简单
- 如何使用javascript操作SVG节点,使其在MS Edge中工作
- Rails-带有单选按钮的表单,带有启用/禁用附加元素的javascript操作
- javascript操作(轮盘赌)打开特定页面的结果
- 无法延迟iPhone/iPad上的两个JavaScript操作
- 单击时的javascript操作不起作用
- 如何在我更改输入时添加javascript操作'的内容
- WebSQL和Javascript操作顺序
- 如何使用 JavaScript 操作 html 按钮元素的“onclick”事件
- 使用javascript操作css元素,左短划线
- 遇到奇怪的javascript操作
- 有没有一种方法可以在长时间运行的JavaScript操作之前强制回流
- 根据用户在asp.net网站中选择的弹出窗口使用JavaScript操作网页
- javascript操作错误
- 如何延迟QML中的JavaScript操作
- 使用 JQuery 或 Javascript 操作 JSON
- 单击时的 JavaScript 操作
- 如何在DOM上的javascript操作之后立即获取html元素的高度
- 基于多个可能的 DIV 内容的 JavaScript 操作
- 在加载数据表后触发 JavaScript 操作