Я считаю функциональный подход очень удобным.Например,
// reusable generics TABLE constructor helpers
var TD = function(content) { return $('<td>', { html: content }) }
var TH = function(content) { return $('<th>', { html: content }) }
var TR = function(cell, cells) { // note the kind of cell is a 2^order parameter
return $('<tr>', { html: $.map(cells, cell) })
}
// application example
THEAD = $('<thead>', {html:
TR(TH, [1,2,3,4])})
TBODY = $('<tbody>', {html: [
TR(TD, ['a','b','c','d']),
TR(TD, ['a','b','c','d']),
]})
теперь вызов
$('#table').append($('<table>', {html: [THEAD, TBODY]}))
дает
<table><thead><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td><td>d</td></tr><tr><td>a</td><td>b</td><td>c</td><td>d</td></tr></tbody></table>
edit
Я усовершенствовал свой подход, теперь доступный, например, как html_uty.js