2015-09-23 7 views
1

У меня есть таблица html, и я хочу покрасить строки на основе значения в первом столбце этой строки. Если значение «ПОДТВЕРЖДЕНО», я хочу, чтобы цвет был зеленым, и если он «НЕОПРЕДЕЛЕН», я хочу покрасить строку красным цветом.Строка таблицы цветов на основе значения столбца

JS я использую, чтобы сделать это:

$(function(){ 
    $("tr").each(function(){ 
     var col_val = $(this).find("td:eq(1)").text(); 
     if (col_val == "CONFIRMED"){ 
     $(this).addClass('selected'); //the selected class colors the row green// 
     } else { 
     $(this).addClass('bad'); 
     } 
    }); 
}); 

CSS-выглядит следующим образом:

.selected { 
background-color: green; 
    color: #FFF; 
} 

.bad { 
    background-color: red; 
    color: #FFF; 
} 

таблица HTML генерируется из панд dataframe на мой взгляд, Джанго и прошел в например:

<div class="table-responsive" style="margin-left: 15%; margin-right: 15%; overflow:auto;"> 
    {{ datatable | safe }} 
</div> 

Проблема в том, что она окрашивает все мои ряды красным цветом. Может ли кто-нибудь сказать мне, что я делаю неправильно?

+3

Вы можете разместить CSS и HTML? – tcigrand

+2

eq основан на 0, поэтому вы должны использовать 'find (" td: eq (0) ")', чтобы получить первый столбец –

+0

@BenMansley. Первый столбец таблицы на самом деле является индексом. Когда я печатал '$ (this) .find (" td: eq (1) "). Text()' в консоль отображал правильное значение для каждой строки. – kdubs

ответ

3

Поскольку вы используете ==="CONFIRMED", убедитесь, что это действительно: UPPERCASE, и что в HTML-формате нет начальных или конечных пробелов " CONFIRMED" или "CONFIRMED ".

код вы показываете окрасит .selected весь ряд :eq(1) TD Whos имеет "ПОДТВЕРЖДЕНО" содержание:

$(function(){ 
 
    $("tr").each(function(){ 
 
    var col_val = $(this).find("td:eq(1)").text(); 
 
    if (col_val == "CONFIRMED"){ 
 
     $(this).addClass('selected'); //the selected class colors the row green// 
 
    } else { 
 
     $(this).addClass('bad'); 
 
    } 
 
    }); 
 
});
.selected{ 
 
    background-color:green; 
 
} 
 
.bad{ 
 
    background-color:red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>1</td><td>CONFIRMED</td> 
 
    </tr> 
 
    <tr> 
 
    <td>2</td><td>UNCONFIRMED</td> 
 
    </tr> 
 
</table>

ничего плохого о нем.

Если это не то, что вы видите на своем экране, обратите внимание, что индекс :eq() основан на индексе, а индекс индекса начинается с 0, так что :eq(0), вероятно, что вы хотите?

Другая возможная вещь, что вы не точное содержание строки устанавливается как "CONFIRMED", но, вероятно, есть некоторые пробелы до или после - поэтому убедитесь, что обрезать их с помощью $.trim()

if($.trim(col_val) === "CONFIRMED") 

если вы дополнительно хотим, чтобы сделать код еще более гибким в верхнем регистре или капитализацию вы можете сделать, как:

if($.trim(col_val.toLowerCase()) === "confirmed") 
// Will work on "CONFIRMED", "Confirmed", "conFIRMed" etc 
+1

Ahh добавление '.trim()' исправлено. Благодаря! – kdubs

+0

@kdubs добро пожаловать –

+0

что это ': eq()' ??? это то, что я сделал ... но не смог получить результат..pls help $ ("tr"). each (function() { \t \t var status = $ ('# EnquiryList.status.status'). Val(); \t вар col_val = $ (это) .find ("тд: эк (0)"). текст(); \t \t если (col_val == "предложение Сформирован") { \t \t $ (это) .addClass ('красная'); // выбранного цвета класса строка зеленый // \t \t} Else { \t \t \t $ (это) .addClass ('синий'); \t \t} \t}); – Elizabeth

0

Если вы ищете первый столбец в строке вы бледная т использовать:

var col_val = $(this).find("td:eq(0)").text(); 

td:eq(1) Изменение к td:eq(0)

0

Чтобы найти первый столбец в строке, вы хотите использовать селектор first-child. Вы можете выполнять итерацию по каждому первому столбцу с помощью функции each.

Затем мы рассмотрим текст и добавим соответствующий класс к родительскому элементу столбца (tr).

$(document).ready(function() { 
    $("td:first-child").each(function() { 
     if ($(this).text() === "Confirmed") { 
      $(this).parent().addClass("green"); 
     } 
     else { 
      $(this).parent().addClass("red"); 
     } 
    }); 
}); 

http://jsfiddle.net/cw43ejjf/

Смежные вопросы