Изменить порядок альтернативных цветов

#jquery

#jquery

Вопрос:

У меня есть таблица с чередующимися цветными строками.

 $("#contTbl tr:even").addClass("altBgr"); 
  

Затем у меня есть функция, которая выполняет некоторую транзакцию, и после публикации AJAX она удаляет строку.

 $(".clickMe").click(function() {
        var trID = $(this).closest("tr").attr("id");
        $.ajax({
            url: "ajax.php",
            type: "POST",
            data: { 
                contID: trID
            },
            success: function(data){
                $("#" trID).remove();
            }
        });
    });
  

Проблема, с которой я сталкиваюсь, заключается в том, что когда я удаляю строку, цвет других строк становится неправильным… Есть ли способ как-то обновить его при удалении?

Ответ №1:

Как насчет удаления class по щелчку и добавления его обратно при успешном извлечении?

 $(".clickMe").click(function() {
    var trID = $(this).closest("tr").attr("id");
    $.ajax({
        url: "ajax.php",
        type: "POST",
        data: { 
            contID: trID
        },
        success: function(data){
            $("#" trID).remove();
            $("#contTbl tr:even").removeClass("altBgr");  
            $("#contTbl tr:even").addClass("altBgr");
        }
    });
});
  

Отредактировано: согласно моему собственному комментарию

Вы можете попробовать поместить как removeClass(), так и addClass() в success: и посмотреть, устраняет ли это мерцание

Комментарии:

1. Вы можете попробовать поместить как removeClass(), так и addClass() в success: и посмотреть, устраняет ли это мерцание @santa

2. Бинго. Перемещено как в функцию успеха, так и в мерцание исчезло.

Ответ №2:

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

Или используйте CSS для раскрашивания :nth-child

 tr:nth-child(even) td { 
    background: #f03;
}
  

…имейте в виду, < IE 9 не будет играть хорошо.

Комментарии:

1. Я попытался поместить его в функцию, но по какой-то причине все строки становятся одного цвета при удалении строки…

2. Я так надеялся на IE9 : (

3. @santa: IE9 сделает это, меньше, чем IE9, не будет.

Ответ №3:

Вы можете создать функцию, подобную этой:

 function set_odd_even(){
    alert($("table tr"));
    $.each($("table tr"), function(index, value){
        alert(value);
        $(value).removeClass('even');
        if(index % 2){
            $(value).addClass('even');
        }
    });
}
  

А затем вызовите его в своем событии успеха:

 success: function(data){
    $("#" trID).remove();
    set_odd_even();
}
  

Комментарии:

1. Вау, это кажется большим количеством кода для такой мягкой функциональности… Я уверен, что это работает хорошо, хотя! Спасибо.