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

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


当前回答

在以前的回答中没有提到,所以我添加了如何使用最新的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 " > < /脚本>

其他回答

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


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 );

例如,当你想在<select> ! <option>元素中添加<option>

$('<option/>')
  .val(optionVal)
  .text('some option')
  .appendTo('#mySelect')

显然可以应用于任何元素

$('<div/>')
  .css('border-color', red)
  .text('some text')
  .appendTo('#parentDiv')

更新

在jQuery的最新版本中,下面的方法不分配传递给第二个对象的属性

以前的回答

我觉得使用document.createElement('div')与jQuery一起使用更快:

$(document.createElement('div'), {
    text: 'Div text',
    'class': 'className'
}).appendTo('#parentDiv');

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

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

在以前的回答中没有提到,所以我添加了如何使用最新的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 " > < /脚本>