我正在重构一些旧的JavaScript代码,其中有很多DOM操作。
var d = document;
var odv = d.createElement("div");
odv.style.display = "none";
this.OuterDiv = odv;
var t = d.createElement("table");
t.cellSpacing = 0;
t.className = "text";
odv.appendChild(t);
我想知道是否有一个更好的方法来做到这一点使用jQuery。我一直在尝试:
var odv = $.create("div");
$.append(odv);
// And many more
但我不确定这样是否更好。
这是“一”行中的例子。
this.$OuterDiv = $('<div></div>')
.hide()
.append($('<table></table>')
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
更新:我想我应该更新这篇文章,因为它仍然有相当多的流量。在下面的评论中,有一些关于$("<div>") vs $("<div></div>") vs $(document.createElement('div'))作为创建新元素的方式的讨论,以及哪种是“最好的”。
我整理了一个小型基准测试,以下是重复上述选项10万次的大致结果:
jQuery 1.4, 1.5, 1.6
Chrome 11 Firefox 4 IE9
<div> 440ms 640ms 460ms
<div></div> 420ms 650ms 480ms
createElement 100ms 180ms 300ms
jQuery 1.3
Chrome 11
<div> 770ms
<div></div> 3800ms
createElement 100ms
jQuery 1.2
Chrome 11
<div> 3500ms
<div></div> 3500ms
createElement 100ms
我觉得这没什么好惊讶的,但是文件。createElement是最快的方法。当然,在开始重构整个代码库之前,请记住我们在这里讨论的差异(除了老式jQuery版本之外的所有版本)相当于每1000个元素增加3毫秒。
更新2
jQuery 1.7.2更新,并将基准放在JSBen上。Ch可能比我的原始基准更科学,而且现在可以众包了!
http://jsben.ch/#/ARUtz
这是“一”行中的例子。
this.$OuterDiv = $('<div></div>')
.hide()
.append($('<table></table>')
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
更新:我想我应该更新这篇文章,因为它仍然有相当多的流量。在下面的评论中,有一些关于$("<div>") vs $("<div></div>") vs $(document.createElement('div'))作为创建新元素的方式的讨论,以及哪种是“最好的”。
我整理了一个小型基准测试,以下是重复上述选项10万次的大致结果:
jQuery 1.4, 1.5, 1.6
Chrome 11 Firefox 4 IE9
<div> 440ms 640ms 460ms
<div></div> 420ms 650ms 480ms
createElement 100ms 180ms 300ms
jQuery 1.3
Chrome 11
<div> 770ms
<div></div> 3800ms
createElement 100ms
jQuery 1.2
Chrome 11
<div> 3500ms
<div></div> 3500ms
createElement 100ms
我觉得这没什么好惊讶的,但是文件。createElement是最快的方法。当然,在开始重构整个代码库之前,请记住我们在这里讨论的差异(除了老式jQuery版本之外的所有版本)相当于每1000个元素增加3毫秒。
更新2
jQuery 1.7.2更新,并将基准放在JSBen上。Ch可能比我的原始基准更科学,而且现在可以众包了!
http://jsben.ch/#/ARUtz