Есть табличная верстка, в каждой строке по 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])
к примеру.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть класс Shape из него надо передать параметры shapeColors в другой класс DrawНикак не могу разобраться, как это сделать
Вывожу с сервера список компаний вида: {"list":[{"name":"Photolist","location":{"name":"Poland","code":"PL"},"partners":[{"name":"Oloo","value":30},{"name":"Flashset","value":87}]}