协慌网

登录 贡献 社区

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()方法附加到 DOM 中。

例如:

var t = $("<table cellspacing='0' class='text'></table>");
$.append(t);

然后,如果您愿意,可以以编程方式填充此表。

这使您能够指定任何您喜欢的任意 HTML,包括类名或其他属性,您可能会比使用createElement更简洁,然后通过 JS 设置cellSpacingclassName等属性。

创建新的 DOM 元素是jQuery()方法的核心功能,请参阅: