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

时间:2010-08-02 23:02:58

标签: jquery reverse each

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

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);
    });
}

3 个答案:

答案 0 :(得分:4)

我不能肯定地根据这个问题说出来,但我认为这就是你所追求的:

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()来获取之后的所有<li>元素我们删除的元素,并且仅对那些<li>进行编号。您可以使用:gt()(大于索引),但.slice()只会减少字符串连接(虽然速度有点快,但无差异)。

答案 1 :(得分:1)

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

更多信息请@dave

答案 2 :(得分:0)

尼克,你几乎就到了!在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);
}

感谢大家的帮助!