Есть табличная верстка, в каждой строке по 2 столбца, т.е. структура такая:
<tr>
<td>1 столбец</td>
<td>2 столбец</td>
</tr>
Выбираю все строки из таблицы:
var rows = window.document.querySelectorAll("table tbody tr");
Мне нужно получить значение обоих столбцов. Как я могу это сделать?
Например, так:
var rows = window.document.querySelectorAll("table tbody tr");
for (var i = 0; i < rows.length; i++) { // перебираем все строки
var cols = rows[i].querySelectorAll('td'); // получаем столбцы
for (var j = 0; j < cols.length; j++) { // перебираем все столбцы
console.log(cols[j].textContent); // выводим текст из столбца
}
}
<table>
<tbody>
<tr>
<td>1 столбец</td>
<td>2 столбец</td>
</tr>
</tbody>
</table>
Вам вернется набор всех подходящих элементов. В итоге вам нужно просто по всем им пройтись. Это можно сделать следующим образом: использовать метод arr.forEach(callback[, thisArg]) для перебора массива.
Он для каждого элемента массива вызывает функцию callback.
Этой функции он передаёт три параметра callback(item, i, arr):
item – очередной элемент массива.
i – его номер.
arr – массив, который перебирается.
Например:
var arr = ["Яблоко", "Апельсин", "Груша"];
arr.forEach(function(item, i, arr) {
alert( i + ": " + item + " (массив:" + arr + ")" );
});
Второй, необязательный аргумент forEach позволяет указать контекст this для callback.
Метод forEach ничего не возвращает, его используют только для перебора, как более «элегантный» вариант, чем обычный цикл for.
var rows = window.document.querySelectorAll("table tbody tr td");
rows.forEach(function(item){
alert(item.innerHTML);
});
<table>
<tr>
<td>1 столбец</td>
<td>2 столбец</td>
</tr>
</table>
[...rows]). Так у нас появится массив строчек таблицы.Array#map, получим из нее массив ячеек (item => [...item.cells]).[...item.cells].map(item => item.innerHTML)).На выходе получится массив массивов с содержимым ячеек.
let rows = document.querySelector('table').rows;
let cells = [...rows].map(item => [...item.cells].map(item => item.innerHTML));
console.log(cells);
<table>
<tr>
<td>1 столбец</td>
<td>2 столбец</td>
</tr>
<tr>
<td>1-1 столбец</td>
<td>2-1 столбец</td>
</tr>
<tr>
<td>1-2 столбец</td>
<td>2-2 столбец</td>
</tr>
</table>
При получении определённого tr, в querySelectorAll, вам вернётся массив элементов. Соотвественно в rows Лежит массив из двух элементов, первого tr и второго tr, так и получайте их значение alert(rows[0]) к примеру.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости