jQuery document.createElement equivalent?

2022-08-29 22:04:21

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

但我不确定这是否更好。


答案 1

下面是“一”行中的示例。

this.$OuterDiv = $('<div></div>')
    .hide()
    .append($('<table></table>')
        .attr({ cellSpacing : 0 })
        .addClass("text")
    )
;

更新:我想我会更新这篇文章,因为它仍然获得了相当多的流量。在下面的评论中,有一些关于vs vs作为创建新元素的方式的讨论,哪个是“最好的”。$("<div>")$("<div></div>")$(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

我认为这没什么大不了的,但这是最快的方法。当然,在你开始重构整个代码库之前,请记住,我们在这里谈论的差异(除了jQuery的古老版本之外的所有差异)相当于每千个元素额外增加3毫秒。document.createElement


更新 2

针对jQuery 1.7.2进行了更新,并放置了基准测试,该基准可能比我的原始基准测试更科学一些,而且现在可以众包!JSBen.ch

http://jsben.ch/#/ARUtz


答案 2

只需提供要添加到jQuery构造函数的元素的HTML,就会从新构建的HTML返回一个jQuery对象,该对象适合使用jQuery的方法追加到DOM中。$()append()

例如:

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

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

这使您可以指定任何您喜欢的任意HTML,包括类名或其他属性,您可能会发现这些属性比使用和然后通过JS设置属性更简洁。createElementcellSpacingclassName