动态构建表格行时jQuery是否多次修改DOM?含代码场景咨询
关于jQuery动态构建表格行的DOM修改次数问题
好问题!咱们来仔细拆解你这段代码的执行逻辑,就能搞清楚DOM修改的次数,以及这种写法的合理性:
1. 你的代码只会修改DOM一次
先看核心逻辑:你先通过$('<tr>')在内存中创建了一个<tr>元素,这个元素此时还没有被插入到页面的DOM树里。接下来所有的.append($('<td>'))操作,都是在这个内存里的<tr>上添加子元素——这一系列操作完全不会触发DOM树的更新,因为元素还没“上树”。
直到最后一步,把整个构建好的<tr>通过.append()添加到$('.widget').find('tbody')中时,才会发生唯一一次DOM修改:把完整的表格行插入到DOM树里,浏览器只需要做一次重排重绘。
2. 你的写法已经是最优实践:先在内存构建元素再追加
你问“是否应当先在内存中构建<tr>元素,再将其追加到tbody中”——其实你的代码已经这么做了!这种写法正是推荐的性能优化方式:
- 避免了多次DOM操作带来的性能损耗(每次DOM修改都会触发浏览器的重排重绘,频繁操作会拖慢页面)
- 内存中构建元素的速度远快于直接操作DOM
反过来说,如果是先把空的<tr>插入到tbody,再逐个添加<td>,那才会触发多次DOM修改:
// 不推荐的写法:多次修改DOM const tbody = $('.widget').find('tbody'); const tr = $('<tr>').appendTo(tbody); // 第一次DOM修改:插入空tr tr.append($('<td>')); // 第二次:插入第一个td tr.append($('<td>').text('Median Values')); // 第三次:插入第二个td // ...后续每个td的添加都会触发一次DOM修改
总结
你的代码写法完全正确,既保证了只修改一次DOM,也遵循了先在内存中构建完整元素再插入DOM的最佳实践,不需要额外调整~
内容的提问来源于stack exchange,提问作者AngryHacker
相关产品推荐
相关产品推荐

