我正在重构一些旧的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的最新版本中,下面的方法不分配传递给第二个对象的属性

以前的回答

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

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

其他回答

var mydiv = $('<div />') // also works

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

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

显然可以应用于任何元素

$('<div/>')
  .css('border-color', red)
  .text('some text')
  .appendTo('#parentDiv')
var div = $('<div/>');
div.append('Hello World!');

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

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


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

从query1.8开始,使用$. parsehtml()创建元素是一个更好的选择。

有两个好处:

1.如果您使用旧的方法,例如$(string), jQuery将检查字符串,以确保您想要选择html标签或创建新元素。通过使用$. parsehtml(),您告诉jQuery您想显式地创建一个新元素,因此性能可能会好一些。

2.更重要的是,如果你使用旧的方法,你可能会遭受跨站点攻击(更多信息)。如果你有这样的东西:

    var userInput = window.prompt("please enter selector");
    $(userInput).hide();

坏人可以输入<script src="xss- attachment .js"></script>来戏弄你。幸运的是,$.parseHTML()为你避免了这种尴尬:

var a = $('<div>')
// a is [<div>​</div>​]
var b = $.parseHTML('<div>')
// b is [<div>​</div>​]
$('<script src="xss-attach.js"></script>')
// jQuery returns [<script src=​"xss-attach.js">​</script>​]
$.parseHTML('<script src="xss-attach.js"></script>')
// jQuery returns []

但是,请注意,a是一个jQuery对象,而b是一个html元素:

a.html('123')
// [<div>​123​</div>​]
b.html('123')
// TypeError: Object [object HTMLDivElement] has no method 'html'
$(b).html('123')
// [<div>​123​</div>​]