JQuery удаление элемента и перенумерация оставшихся элементов - PullRequest
2 голосов
/ 03 августа 2010

Кто-нибудь видит недостаток в моем коде здесь, потому что этот поставил меня в тупик!

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 ]

4 голосов
/ 03 августа 2010

Не могу точно сказать, основываясь на вопросе, но я думаю вот что вы ищете:

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 голос
/ 03 августа 2010

Вы уверены, что должны использовать реверс? из того, что я вижу, вы удаляете элемент, а затем перенумеровываетесь обратно наверх. Вы должны перенумеровать вниз или цифры поменялись местами?

больше информации, пожалуйста, @ dave

0 голосов
/ 03 августа 2010

Ник, ты был ПОЧТИ там!Требуется (+1) вместо (-1) в 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);
    });
    var item_positions = $('#ml_organize').sortable('toArray');
    alert(item_positions);
}

Спасибо всем за помощь!

...