menuOrder
是一个空div
$("#menuOrder").append('<table>');
$(menus).each(function(i, menu) {
$("#menuOrder").append('<tr><td>');
$("#menuOrder").append(menu.text);
$("#menuOrder").append('</td><td>');
if (i > 0) {
$("#menuOrder").append('<img src="/images/_images/up.png" />');
} else {
$("#menuOrder").append('<img src="/images/_images/blank.png" />');
}
if (i < menus.length - 1) {
$("#menuOrder").append('<img src="/images/_images/down.png" />');
}
$("#menuOrder").append('</td>');
$("#menuOrder").append('</tr>');
});
$("#menuOrder").append('</table>');
此代码无法正常工作,如何以最少的迭代更改它?
答案 0 :(得分:4)
尝试做这样的事情:
var rows = [];
$(menus).each(function(i, menu) {
var row = '<tr><td>'.menu.text.'</td><td>';
if (i > 0) {
row +='<img src="/images/_images/up.png" />';
}
else {
row +='<img src="/images/_images/blank.png" />';
}
if (i < menus.length - 1) {
row +='<img src="/images/_images/down.png" />';
}
row += '</td></tr>';
rows.push(row);
});
$('<table></table>').append(rows.join('')).appendTo('#menuOrder');
这会使rows
数组填充一个包含每行HTML的字符串。当它完成所有行的创建后,它会创建一个表元素的jQuery对象并将所有行追加到它。然后将表格附加到#menuOrder
。
答案 1 :(得分:1)
请注意,使用append()
时,您无法执行此操作:
$("#menuOrder").append('</table>');
您必须考虑完整的DOM节点,而不是将HTML字符串粘合在一起。 append()
的有效参数示例:
.append($('.something'))
.append(document.createElement('div'))
.append('<div />') // automatically creates empty div element
.append('<tr><td></td></tr>') // automatically creates tr with td inside