假设我有一个空的div:
<div id='myDiv'></div>
这个是:
$('#myDiv').html("<div id='mySecondDiv'></div>");
与之相同:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
假设我有一个空的div:
<div id='myDiv'></div>
这个是:
$('#myDiv').html("<div id='mySecondDiv'></div>");
与之相同:
var mySecondDiv=$("<div id='mySecondDiv'></div>");
$('#myDiv').append(mySecondDiv);
<div></div>
给jQuery()
,jQuery会采取捷径,简单地执行document.createElement('div')
。element.innerHTML = ...
那么简单 - 如我所述,会进行一系列的检查和优化。jQuery(Array(101).join('<div></div>'));
还需要考虑可读性和维护性的问题。
这个:
$('<div id="' + someID + '" class="foobar">' + content + '</div>');
相对于这个,要维护起来很多更困难:
$('<div/>', {
id: someID,
className: 'foobar',
html: content
});
EL-glue-EL-glue-EL
会有2个粘合剂一样。在詹姆斯的例子中,数组元素是“空”的,所以连接N个空元素会导致N-1个连续的粘合剂。 - Fabrício Matté'class'
(带引号)而不是className
:由于“class”是JavaScript保留字,因此在对象中必须将其名称加上引号,并且不能使用“className”,因为它指的是DOM属性,而不是属性。http://api.jquery.com/jquery/#jQuery-html-attributes - SharpC它们不是相同的。第一个 替换 HTML 而不需要先创建另一个 jQuery 对象。第二个则为第二个 div 创建了额外的 jQuery 封装器,然后将其 附加 到第一个上。
一个 jQuery 封装器(每个示例):
$("#myDiv").html('<div id="mySecondDiv"></div>');
$("#myDiv").append('<div id="mySecondDiv"></div>');
两个jQuery包装器(例如):
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').html(mySecondDiv);
var mySecondDiv=$('<div id="mySecondDiv"></div>');
$('#myDiv').append(mySecondDiv);
您有几种不同的用例。如果您想要替换内容, .html
是一个很好的选择,因为它等效于innerHTML = "..."
。但是,如果您只想追加内容,则多余的$()
包装器是不必要的。
只有在需要稍后操作添加的
var mySecondDiv = $("<div id='mySecondDiv'></div>").appendTo("#myDiv");
// other code here
mySecondDiv.hide();
如果你所说的 .add
的意思是 .append
,那么当 #myDiv
为空时,结果是相同的。
性能是否相同?不知道。
.html(x)
最终执行的操作与 .empty().append(x)
相同。
.html()
将替换所有内容。
.append()
只会在末尾追加内容。
var mySecondDiv = $('<div></div>');
$(mySecondDiv).find('div').attr('id', 'mySecondDiv');
$('#myDiv').append(mySecondDiv);
Luca提到html()
只是插入HTML,这样可以获得更快的性能。
但在某些情况下,你可能会选择第二个选项,请考虑:
// Clumsy string concat, error prone
$('#myDiv').html("<div style='width:'" + myWidth + "'px'>Lorem ipsum</div>");
// Isn't this a lot cleaner? (though longer)
var newDiv = $('<div></div>');
$(newDiv).find('div').css('width', myWidth);
$('#myDiv').append(newDiv);
px
):$('<div />', { width: myWidth }).appendTo("#myDiv");
- Doug Neiner除了已经给出的答案,如果你遇到以下情况:
<div id="test">
<input type="file" name="file0" onchange="changed()">
</div>
<script type="text/javascript">
var isAllowed = true;
function changed()
{
if (isAllowed)
{
var tmpHTML = $('#test').html();
tmpHTML += "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').html(tmpHTML);
isAllowed = false;
}
}
</script>
如果您想在上传了任何文件后自动添加一个文件上传,那么上述代码将无法正常工作,因为在文件上传后,第一个文件上传元素将被重新创建,因此上传的文件将从中删除。您应该使用 .append() 代替:
function changed()
{
if (isAllowed)
{
var tmpHTML = "<input type=\"file\" name=\"file1\" onchange=\"changed()\">";
$('#test').append(tmpHTML);
isAllowed = false;
}
}
.html
最终只会将最后一个对象添加到父元素中,而.append
将所有列表对象都添加为父元素的子级。