Вот подход, который может сработать для вас (непроверенный и вне моей головы).Это относится только к главным строкам заголовка «документ», но если это работает для вас, я уверен, что вы можете адаптировать эту идею и к внутренним строкам.
Во-первых, удобная функция для построения "документ "строка, соответствующая вашему шаблону выше.Предположительно, у вас уже есть что-то для генерации этих строк:
var makeDocRow = function(name, description) {
return $('<tbody><tr class="docRow" bgcolor="#EFE5D3" style="font-weight: bold; font-size: 1.1em;">\
<td width="25px"><a class="docEditLink docAdminFormSubmit" name="whatever" href="#">Edit</a></td>\
<td width="20px"><input type="checkbox" class="chkDeleteDocs" name="removeDocs[]" value="whatever" /></td>\
<td>' + name + '</td>\
<td>' + description + '</td>\
</tr></tbody>');
};
Далее, функция для добавления новой строки документа:
var addDocRow = function(name, description) {
var counter = 0; // so we know when we've reached the end
// assumes it's already sorted
$('#main').find('tr.docRow').each(function() {
counter++;
if ($(this).find('td:eq(2)').html() >= name) {
/* Have we found the right slot for the new document by name?
td:eq(2) refers to the table cell containing the name for comparison
Assumes the table is always sorted to start */
$(this).parent().before(makeDocRow(name, description)); // build/add row
return false; // break out of each() since we're done
}
// Handle case where we've reached the end, but we're still in the loop.
// This means the new row is alphabetically last, so insert after
if ($(this).closest('table').find('tr.docRow').length === counter ) {
$(this).parent().after(makeDocRow(name, description));
}
});
};
И в вашем коде, когда вы хотите вставитьновый ряд:
addDocRow('Document C','Document C Description');
addDocRow('Document Z','Document Z Description');
Это, безусловно, можно сделать лучше, не проверено, и с моей головы, но, возможно, это будет полезно.
Редактировать: бросил егов скрипку.Кажется, работает.http://jsfiddle.net/redler/fhkWT/