一尘不染

jQuery document.createElement是否等效?

javascript

我正在重构一些旧的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

但是我不确定这是否更好。


阅读 303

收藏
2020-04-25

共1个答案

一尘不染

这是您在“一个”行中的示例。

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比我的原始基准更科学的位置,而且现在可以众包!

2020-04-25