jQuery изменяет цвет текста ячейки таблицы на основе текста

#jquery #html #css

#jquery #HTML #css

Вопрос:

У меня есть таблица, в которой есть столбцы данных, содержащие статус. Два примера статусов будут «Отклонены» и «Оплачены»

То, что я хочу сделать, это изменить цвет текста «Отклонено» на красный, а цвет «Оплачено» на зеленый.

Для ячеек с таким статусом я добавил td classs к подобному:

 <td class="status">
    @Html.DisplayFor(modelItem => item.Status)
</td>
  

Поэтому я могу легко его идентифицировать.

Я обнаружил, что могу изменить цвет всех статусов на красный, используя:

 $('.status').css("color", "red");
  

Также я мог бы получить значение первого с помощью:

 alert($('.status').html());
  

Однако я не уверен, как установить цвет статуса на основе его текста. т.е. для всех «Полученных» установите цвет на красный, а для всех «оплаченных» установите цвет на зеленый.

Может кто-нибудь просветить меня о том, как этого добиться?

Я даже следую правильному подходу, используя jQuery, или есть лучший способ css?

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

1. Если значение этого столбца не изменено на стороне клиента. Я бы предложил установить класс при отрисовке страницы в скрипте на стороне сервера (PHP,ASP.NET , и т.д.)

2. Он может изменить сторону клиента через ajax, так что, возможно, это не сработает

Ответ №1:

Это будет работать:

 $('.status:contains("Paid")').css('color', 'red');
$('.status:contains("Received")').css('color', 'green');
  

http://jsfiddle.net/MMEhc/

Ответ №2:

Также я мог бы получить значение первого по…

С помощью этого селектора вы получаете коллекцию. И вы делаете .html() это с первым элементом в коллекции.

Вы можете перебрать все status ячейки, чтобы проверить статус и изменить цвет.

 $('.status').each(function() {
  // check text and do styling
});
  

Однако это не является предпочтительным (потому что это не нужно). И это снижает производительность.

Вы также можете использовать jQuery .contains() для этого ( http://api.jquery.com/contains-selector / ).

Также на самом деле не требуется. И я думаю, что это не лучший вариант с точки зрения производительности.

Итак, лучший вариант (ИМХО):

Почему бы вам просто не добавить два дополнительных класса к ячейкам: status-received и status-paid поскольку вы уже знаете статус ячеек при их рендеринге.

Итак, вы просто могли бы сделать:

 $('.status-received').css("color", "red");
$('.status-paid').css("color", "red");
  

Или полностью удалите jQuery (поскольку он нам больше не нужен (если мы не собираемся динамически изменять ячейки)) и просто оформите два класса с помощью CSS.

Ответ №3:

Если вы печатаете таблицу из базы данных, просто назначьте класс на td основе результата.

Затем назначьте цвет фона этому классу.

 td.paid {
 display:block;
background-color:red;

}

td.recieved {
 display:block;
background-color:green;
}
  

Почему вам нужно использовать javascript для этого в первую очередь?

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

Ответ №4:

Недавно мне пришлось сделать что-то подобное. Мне нужно было изменить цвет фона на красный (ну, розоватый), когда произошла ошибка, и оставить его белым, когда все было хорошо. Вот мой код:

 warning_color = "#ffffff";

if (error_happened)
    warning_color = "#ffaaaa";

$("#input_box").css('background-color', warning_color);
  

Ответ №5:

 $('td.status').each(function() {
  if ($(this).text() == 'Received') {
      $(this).style('color', 'red');
  } // similarly for other statuses
});
  

Ответ №6:

 $('.status').addClass($(".status").html());
  

Тогда вы могли бы иметь .Paid класс и .Received класс и установить css в этих классах соответственно. Таким образом, если вы когда-нибудь захотите изменить css позже, он абстрагируется от javascript. Также вы можете использовать эти классы и в других местах, если это необходимо.