Посмотрите на плагин шаблона.
http://plugins.jquery.com/project/jquerytemplate
Ваш код теперь может выглядеть так:
$.getJSON("api/test",
function(data)
{
var t = $.template('<tr><td><input type="radio" name="{name}"/><td>{name}</td><td>{descr}</td></tr>');
$.each(data, function ()
{
$("#tests").append(t, this);
}
}
);
EDIT
Как правильно указывает redsquare, если у вас большое количество строк, выполнение DOM в каждой итерации может быть очень медленным. Не изменяйте свой код, если вы не профилировали свой код и не обнаружили, что этот конкретный цикл является узким местом.
Если я позаимствую метод 'string.Format' из этого поста , вы можете сделать что-то вроде
$.getJSON("api/test",
function(data)
{
var template = '<tr><td><input type="radio" name="{name}"/><td>{descr}</td><td>{1}</td></tr>';
var html = [];
$.each(data, function ()
{
html.push(template.format(this));
}
$('#tests').append(html.join(''));
}
);
РЕДАКТИРОВАТЬ: Изменение строки. Функция форматирования , чтобы получить ключ на основе имени. Теперь ваш код шаблона может использовать {name}, {descr} вместо {0}, {1}. Функция попытается найти свойство с тем же именем в аргументе, переданном функции.
Кроме того, посмотрите на подход Рика Строля и посмотрите, имеет ли он для вас больше смысла.
http://www.west -wind.com / WebLog / сообщений / 300754.aspx