jQuery删除元素并重新编号其余元素

有没有人在这里看到我的代码中的缺陷,因为这个让我难过!

function removeMLRow(rowNo) { $('#ml_organize li:eq(' + (rowNo - 1) + ')').remove(); $($('#ml_organize li:eq(' + (rowNo) + ')').get().reverse()).each(function() { var newID = 'li' + ($(this).index() - 1); $(this).attr('id',newID); }); } 

基于这个问题,我不能肯定地说,但我认为这就是你所追求的:

 function removeMLRow(rowNo) { $('#ml_organize li').eq(rowNo - 1).remove(); $('#ml_organize li').slice(rowNo -1).each(function() { var newID = 'li' + ($(this).index() + 1); $(this).attr('id',newID); }); } 

首先,您可以使用.eq()而不是:eq()来使事情更清晰。 然后我们使用.slice()来获取我们删除的元素之后的所有

  • 元素并仅对那些

  • 进行编号。 你可以使用:gt() (大于索引),但.slice()只是减少字符串连接(虽然有点快,但无穷小)。

    你确定你应该使用反向。 从我看到你删除一个元素,然后重新编号回到顶部。 你应该重新编号到底部还是数字反转?

    更多信息请@dave

    尼克,你几乎都在那里! 在newID中需要(+1)而不是(-1)。

     function removeMLRow(rowNo) { $('#ml_organize li').eq(rowNo - 1).remove(); $('#ml_organize li').slice(rowNo - 1).each(function() { var newID = 'li' + ($(this).index() + 1); $(this).attr('id',newID); }); var item_positions = $('#ml_organize').sortable('toArray'); alert(item_positions); } 

    感谢大家的帮助!