最初,您可以使用基本sort
函数对表进行排序(如果尚未对行进行排序):
标记
(注意:将您的自定义val
属性添加为数据属性)
<table>
<tbody>
<tr data-val="1"><td>1st</td></tr>
<tr data-val="4"><td>3rd</td></tr>
<tr data-val="7"><td>4th</td></tr>
<tr data-val="2"><td>2nd</td></tr>
</tbody>
</table>
jQuery
$('table').html(function() {
return $(this).find('tr').sort(function(a, b) {
return $(a).data('val') > $(b).data('val');
});
});
data-val
对行进行排序后,您可以通过抓取大于或等于的第一行来轻松找到插入新行的data-val
位置newRow
:
var $newRow = $('<tr data-val="3"><td>Between 2nd and 3rd!</td></tr>');
var elementToInsertBefore = $('tr').filter(function() {
return $(this).data('val') >= $newRow.data('val');
}).get(0);
if (typeof elementToInsertBefore === 'undefined') {
$('table').append($newRow);
} else {
$newRow.insertBefore(elementToInsertBefore);
}
因此,如果过滤器没有返回一个elementToInsertBefore
(即没有data-val
大于或等于 的现有行,$newRow's
data-val
则将其附加到表的末尾,否则将其插入到elementToInsertBefore
.
旁注:使用for
循环获取elementToInsertBefore
. 这样,只要找到符合条件的行,就可以break
退出,这可以防止进一步不必要的迭代(在处理大量行时可能会获得不错的性能提升)。
如果您想要更详细的内容,请查看提到的 jQuery 插件。