получить значения элементов через js

287
20 сентября 2017, 13:47

Есть табличная верстка, в каждой строке по 2 столбца, т.е. структура такая:

<tr>
  <td>1 столбец</td>
  <td>2 столбец</td>
</tr>

Выбираю все строки из таблицы:

var rows = window.document.querySelectorAll("table tbody tr");

Мне нужно получить значение обоих столбцов. Как я могу это сделать?

Answer 1

Например, так:

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>

Answer 2

Вам вернется набор всех подходящих элементов. В итоге вам нужно просто по всем им пройтись. Это можно сделать следующим образом: использовать метод 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>

Answer 3
  1. Получим все ряды таблицы.
  2. Сделаем из нод-листа массив нод ([...rows]). Так у нас появится массив строчек таблицы.
  3. По каждой строчке таблицы пройдемся Array#map, получим из нее массив ячеек (item => [...item.cells]).
  4. Получим содержимое ячеек в этом же цикле, пройдясь еще раз по нему ([...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>

Answer 4

При получении определённого tr, в querySelectorAll, вам вернётся массив элементов. Соотвественно в rows Лежит массив из двух элементов, первого tr и второго tr, так и получайте их значение alert(rows[0]) к примеру.

READ ALSO
Как передать параметры класса в другой класс

Как передать параметры класса в другой класс

Есть класс Shape из него надо передать параметры shapeColors в другой класс DrawНикак не могу разобраться, как это сделать

205
Json вывод списка из обьекта

Json вывод списка из обьекта

Вывожу с сервера список компаний вида: {"list":[{"name":"Photolist","location":{"name":"Poland","code":"PL"},"partners":[{"name":"Oloo","value":30},{"name":"Flashset","value":87}]}

243
ajax-jquery как работает

ajax-jquery как работает

Есть такой фрагмент кода:

235