Вопрос:
У меня есть таблица HTML, как это:
SALES RENTS ROME MILAN ROME MILAN MONEY
HTML-код следующий:
<TR> <TD CLASS=HD1 COLSPAN=2>SALES</TD> <TD CLASS=HD1 COLSPAN=2>RENTS</TD> <TD CLASS=HDCOLSEP> </TD> </TR> <TR> <TD>ROME</TD> <TD>MILAN</TD> <TD>ROME</TD> <TD>MILAN</TD> <TD>MONEY</TD> </TR>
Что мне нужно, так это создать с помощью javascript массив, подобный следующему: (РИМ-ПРОДАЖА, МИЛАН-ПРОДАЖА, РИМ-АРЕНДА, МИЛАН-АРЕНДА, ДЕНЬГИ).
Я уже создал массив, который содержит элемент первой строки. Ниже вы можете найти мой код, который был в прошлом (вначале мне нужно было просто взять элементы первого ТР). Теперь мне нужно изменить его и создать массив, как указано ранее. Я не знаю, понятно ли из таблицы, но первые столбцы ROME и MILAN относятся к столбцу SALES, вторые ROME и MILAN относятся к столбцу RENTS, а MONEY не имеет никакой зависимости. У вас есть идея сделать это? Заранее спасибо.
function getColumnsVal(id) { var header = $(«table#» + id + » thead tr:eq(1)»); var header_fields = $(«td», header); var header_vals = []; header_fields.each(function(idx, val) { var $$ = $(val); header_vals.push($$.text()); }); return header_vals; } Лучший ответ:
Определенно можно прочитать значения из ячеек таблицы. Я немного отредактировал пост, чтобы проиллюстрировать код.
Я предполагаю, что структура HTML жесткая, и у вас всегда есть две строки заголовков в thead и несколько случайное количество объединенных ячеек в первой строке.
Вы хотите соответствовать количеству столбцов в обеих строках, т.е. учитывать число colspan при обходе ячеек.
Читайте обе строки и генерируйте строки, комбинируя значения ячеек в соответствующих столбцах. Например:
function readTableRow(row) { var values = []; $(«td», row).each(function(index, field) { var span = $(field).attr(«colspan»); var val = $(field).text(); if (span && span > 1) { for (var i = 0; i<span; i++ ) { values.push(val); } } else { values.push(val); } }); return values; } function getColumnsVal(id) { // Read the first row, taking colspans into account var first_row = $(«table#» + id + » thead tr:eq(0)»); var first_row_vals = readTableRow(first_row); // Read the second row, taking colspans into account var second_row = $(«table#» + id + » thead tr:eq(1)»); var second_row_vals = readTableRow(second_row); if (first_row_vals.length != second_row_vals.length) { return null; } var results = []; for (var i = 0; i<first_row_vals.length; i++) { results.push([first_row_vals[i].trim(), second_row_vals[i].trim()].filter(function (el) {return el}).join(«-«)); } return results; } function displayResults(results) { var result = «RESULT: <br />»; results.forEach(function(r) { result = result + r + «<br />»; }); $(«#result»).html(result); } displayResults(getColumnsVal(«sample»));