2012-01-04 7 views
3

У меня есть таблица, например, так:Изменение стиля на основе содержимого ячейки

<table> 
    <tr> 
    <td>one</td> 
    <td>two</td> 
    </tr> 
    <tr> 
    <td>three</td> 
    <td>one</td> 
    </tr> 
</table> 

Использование Javascript, как я могу найти таблицу и изменить элемент стиля (например backgroundColor) на основе содержимого ячейки (например, сделать цвет фона всех ячеек со словом «один» в них красным)?

Спасибо!

ответ

5

DEMO

var allTableCells = document.getElementsByTagName("td"); 

for(var i = 0, max = allTableCells.length; i < max; i++) { 
    var node = allTableCells[i]; 

    //get the text from the first child node - which should be a text node 
    var currentText = node.childNodes[0].nodeValue; 

    //check for 'one' and assign this table cell's background color accordingly 
    if (currentText === "one") 
     node.style.backgroundColor = "red"; 
} 
+0

Спасибо, это прекрасно! Я бы ответил скорее, но мне пришлось кричать на OpenDNS. – user1129274

4

Вот код, который выполняет поиск в таблице и устанавливает цвет фона для всех ячеек, содержимое которого является «одним». Я предполагаю, что вы можете приспособить это, чтобы проверить для других значений:

var cells = document.getElementById("test").getElementsByTagName("td"); 
for (var i = 0; i < cells.length; i++) { 
    if (cells[i].innerHTML == "one") { 
     cells[i].style.backgroundColor = "red"; 
    } 
} 

с этим HTML:

<table id="test"> 
    <tr> 
    <td>one</td> 
    <td>two</td> 
    </tr> 
    <tr> 
    <td>three</td> 
    <td>one</td> 
    </tr> 
</table> 

А вот рабочая демонстрация: http://jsfiddle.net/jfriend00/Uubqg/

1

Использование getElementsByTagName() вернуть клетки, и матч слова в их innerText:

var tds = document.getElementById("table-id").getElementsByTagName("td"); 
var num_tds = tds.length; 
for (var i = 0; i < num_tds; i++) { 
    if (tds[i].innerText.indexOf("one") > -1) { 
    tds[i].style.backgroundColor = "red"; 
    } 
} 

Примечание. Это будет соответствовать слову «один» в любой точке ячейки.

Here it is in action on jsFiddle.

0

Кроме того, jQuery пример (для полноты картины)

$.each($('td'), function() { 
    if($(this).html() == 'one') { 
    $(this).css('background-color', 'red'); 
    } 
}); 

Демо: http://jsbin.com/ulexub

0

Зачем использовать Javascript, чтобы сделать это? Вместо этого поставьте таблицу с ячейками, имеющими соответствующий класс, например.

<td class="oneCell">One</td> 

Затем просто используйте CSS для стилизации содержимого по своему усмотрению.

Если вам действительно нужно использовать Javascript, вам необходимо изучить DOM. Есть различные ссылки на линии, например http://www.howtocreate.co.uk/tutorials/javascript/domstructure

+0

Зачем использовать Javascript? Потому что иногда вы не знаете, что будет в ячейке таблицы, или что вы хотите искать. Например, разрешая пользователю выполнять поиск в таблице и выделяя ячейки, соответствующие входному тексту. –

+0

Действительно. Некоторая часть сервера или Javascript необходимо поместить данные в ячейку - следовательно, можно установить класс. –

+0

Но вы не можете придумать имя класса для каждого возможного значения ячейки. –

0

Я хотел динамическое решение, основанное на стоимости и сделал это

$('.dataframe td').each(function(){ 
     var num = parseFloat($(this).text()); 
     if (num > 0) { 
      $(this).addClass('success'); 
      //$(this).css('color','Green'); 
     } else if (num < 0) { 
      $(this).addClass('danger'); 
      //$(this).css('color','Red'); 
     } 
    }); 
Смежные вопросы