Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Смена классов у элементов (https://javascript.ru/forum/dom-window/60972-smena-klassov-u-ehlementov.html)

Staruy 29.01.2016 18:20

Смена классов у элементов
 
Есть такой код:
function show()
{
    $.getJSON( "ajax/temp" )
        .done(function( json ) {
            $.each($('.temp'), function() {
                var name_dat = this.id;
                var temp_dat = parseFloat(json.data[name_dat]);
                $(this).find('.text_temp').html(temp_dat);
                $(this).removeClass('alert-danger');
                $(this).removeClass('alert-warning');
                $(this).removeClass('alert-success');
                $(this).removeClass('alert-info');
                if(temp_dat > '30') {
                    $(this).addClass('alert-danger');
                }
                if(parseFloat('25') < temp_dat < parseFloat('30')) {
                    $(this).addClass('alert-warning');
                }
                if(parseFloat('20') < temp_dat < parseFloat('25')) {
                    $(this).addClass('alert-success');
                }
                if(temp_dat < parseFloat('20')) {
                    $(this).addClass('alert-info');
                }
            });


        })
        .fail(function( jqxhr, textStatus, error ) {
            var err = textStatus + ", " + error;
            console.log( "Request Failed: " + err );
        });
}
$(document).ready(function(){
    setInterval('show()', 1000);
});


Суть в том что по таймауту запрашиваются данные с сервера и в зависимости от полученных чисел меняется класс элемента. Не работает смена классов, почему не понимаю, проблема видимо в куске с условиями...

Буду рад подсказкам.

destus 29.01.2016 18:49

зачем парсить целое число во флоат? и что это за условия a < b < c? Оператор сравнения выполняется для двух операндов. У вас получается он сравнивает два операнда, возвращает true или false и сравнивает с третьим операндом, тем самым преобразуя логическое значение в 0 или 1.

Алексей Петрович 30.01.2016 02:25

var $this = $(this);
$this.removeClass('alert-danger alert-warning alert-success alert-info');
if(temp_dat > 30) {
  $this.addClass('alert-danger');
}
else if(temp_dat > 25) {
  $this.addClass('alert-warning');
}
else if(temp_dat > 20) {
  $this.addClass('alert-success');
}
else {
  $this.addClass('alert-info');
}


Может так заработает?

Staruy 01.02.2016 12:16

function show()
{
    $.getJSON( "ajax/temp" )
        .done(function( json ) {
            $.each($('.temp'), function() {
                var name_dat = this.id;
                var temp_dat = parseFloat(json.data[name_dat]);
                $(this).find('.text_temp').html(temp_dat);
                $(this).removeClass('alert-danger alert-warning alert-success alert-info');
                switch (true) {
                    case temp_dat > parseFloat('30'):
                        $(this).addClass('alert-danger');
                        break;
                    case parseFloat('25') < temp_dat && temp_dat < parseFloat('30'):
                        $(this).addClass('alert-warning');
                        break;
                    case parseFloat('20') < temp_dat && temp_dat < parseFloat('25'):
                        $(this).addClass('alert-success');
                        break;
                    case temp_dat < parseFloat('20'):
                        $(this).addClass('alert-info');
                        break;
                }
            });
        })
        .fail(function( jqxhr, textStatus, error ) {
            var err = textStatus + ", " + error;
            console.log( "Request Failed: " + err );
        });
}
$(document).ready(function(){
    setInterval('show()', 1000);
});


Итоговый вариант. Спасибо за подсказку по удалению класса, забыл что можно указать через пробел.


Часовой пояс GMT +3, время: 23:16.