jQuery document.createElement是否等同?
我正在重构一些旧的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'))
作为创建新元素的一种方式,这是“最好的”。
我把一个小基准放在一起,这里大概是重复上述选项100,000次的结果:
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
我认为这并不是什么大惊喜,但document.createElement
是最快的方法。 当然,在开始重构整个代码库之前,请记住,我们在这里讨论的差异(除了jQuery的所有版本之外)等同于每千个元素额外增加3毫秒。
更新2
更新了jQuery 1.7.2,并将基准放在JSBen.ch上,这可能比我原始的基准测试更科学一些,再加上它现在可以被众包!
http://jsben.ch/#/ARUtz
简单地提供要添加到jQuery构造函数$()
的元素的HTML将从新构建的HTML中返回一个jQuery对象,适合使用jQuery的append()
方法append()
其添加到DOM中。
例如:
var t = $("<table cellspacing='0' class='text'></table>");
$.append(t);
如果你愿意,你可以用编程方式填充这张表。
这使您能够指定任何您喜欢的任意HTML,包括类名或其他属性,您可能会发现它比使用createElement
更简洁,然后通过JS设置像cellSpacing
和className
这样的属性。
创建新的DOM元素是jQuery()
方法的核心功能,请参阅: