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

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


当前回答

这一切都非常直截了当!这里有几个简单的例子…


var $example = $( XMLDocRoot );

var $element = $( $example[0].createElement('tag') );
// Note the [0], which is the root

$element.attr({
id: '1',
hello: 'world'
});

var $example.find('parent > child').append( $element );

其他回答

在以前的回答中没有提到,所以我添加了如何使用最新的jQuery创建元素元素的工作示例,也有其他属性,如内容,类,或onclick回调:

Const挂载点= 'https://jsonplaceholder.typicode.com/users' Const $button = $('button') Const $tbody = $('tbody') const loadAndRender = () => { 美元.getJSON(挂载点)。然后(data => { 美元。Each (data, (index, {id, username, name, email}) => { Let row = $('<tr>') .append($('<td>', {text: id})) .append($(“< td >”,{ 文字:用户名、 类:“按我”, : { 点击:_ => { console.log(名字) } } })) .append($('<td>', {text: email})) tbody.append美元(行) }) }) } 美元的按钮。(“点击”,loadAndRender) .click-me { background - color: lightgrey } <table style="width: 100% < thead > < tr > < th > ID < / th > < th >用户名< / th > < th > < / th >邮件 < / tr > < / thead > tbody > < tbody > < / 表> < / 加载和渲染</button> < script src = " https://code.jquery.com/jquery-3.3.1.min.js " > < /脚本>

jQuery开箱即用并没有createElement的等价物。事实上,jQuery的大部分工作都是在内部使用innerHTML完成的,而不是纯DOM操作。正如Adam在上面提到的,这是你实现类似结果的方法。

还有一些插件可以在innerHTML上使用DOM,比如appendDOM, DOMEC和FlyDOM。在性能方面,原生jquery仍然是性能最好的(主要是因为它使用了innerHTML)

var div = $('<div/>');
div.append('Hello World!');

是在jQuery中创建DIV元素的最短/最简单的方法。

创建新的DOM元素是jQuery()方法的核心特性,请参见:

http://api.jquery.com/jQuery/#creating-new-elements 特别是http://api.jquery.com/jQuery/#example-1-1

这是“一”行中的例子。

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