My site reads a XML file that contains information (values) for a data-table. I use CSS to style the table and everything works fine.
To get a better user-experience I wondered if it is possible to change the background color of each cell dynamically depending on its value?
For example:
Each cell that contains a number less then "5" has a red background color;
each cell >= "5" has a green background color.
My first solution on this is to use Javascript - but I want to know if there is a way to solve this with CSS-styles only?
This isn't possible with just CSS (though you can use JavaScript to assign classes to enable it to be partially implemented with CSS). To use plain JavaScript, rather than a library:
var table = document.getElementById('tableID');
var tbody = table.getElementsByTagName('tbody')[0];
var cells = tbody.getElementsByTagName('td');
for (var i=0, len=cells.length; i<len; i++){
if (parseInt(cells[i].innerHTML,10) > 5){
cells[i].style.backgroundColor = 'red';
}
else if (parseInt(cells[i].innerHTML,10) < -5){
cells[i].style.backgroundColor = 'green';
}
}
JS Fiddle demo.
Or, to use CSS classes:
var table = document.getElementById('tableID');
var tbody = table.getElementsByTagName('tbody')[0];
var cells = tbody.getElementsByTagName('td');
for (var i=0, len=cells.length; i<len; i++){
if (parseInt(cells[i].innerHTML,10) > 5){
cells[i].className = 'red';
}
else if (parseInt(cells[i].innerHTML,10) < -5){
cells[i].className = 'green';
}
}
JS Fiddle demo.
References:
className
.getElementById()
.getElementsByTagName()
.innerHTML
.parseInt()
.style
.without loop you can do it this way
var val="ff";
$("#grid td:contains('"+val+"')").css('background-color', 'red');
Not to sure about css.I'll jump straight to jquery
$('#mytable tr td').each(function(){
if($(this).text() > 5)$(this).css('background-color','red');
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With