JavaScriptで入れ子になった要素を作成する時用の関数

Greasemonkeyとかで複雑な要素作る時用。

var newTag = function (tag) {
    var elem = document.createElement(tag);
    for (var i = 1; i < arguments.length; i++) {
        elem.appendChild(arguments[i]);
    }
    return elem;
};
var newText = function (text) {
    return document.createTextNode(text);
};

newTag関数は可変長引数で、第1引数のタグを作成し、第2引数以降が与えられた場合子ノードとして順に追加してから返す。
newText関数はおまけ。

例として以下のような要素を作成する場合

<table>
  <tr><td>三浦</td><td>20</td></tr>
  <tr><td>菊地</td><td>16</td></tr>
  <tr><td>如月</td><td>15</td></tr>
</table>
newTag('table', newTag('tr', newTag('td', newText('三浦')),
                             newTag('td', newText(20))),
                newTag('tr', newTag('td', newText('菊地')),
                             newTag('td', newText(16))),
                newTag('tr', newTag('td', newText('如月')),
                             newTag('td', newText(15))));

のように書ける。
直接createElementとappendChildで追加していく方法や、
要素のinnerHTMLをいじる方法よりは短く視認性保って書けるはず。
こういう場合って他にセオリーみたいなものがあるのかな。