Построить объект, состоящий из пар имя / значение ячеек в строке таблицы HTML в JavaScript - PullRequest
0 голосов
/ 11 января 2019

Я новичок в JS, так что терпите меня; Я даже не уверен, правильно ли я ищу ответ, но я не смог заставить его работать после нескольких часов поиска и поиска.

У меня есть таблица HTML, и пользователь нажимает на строку. Я могу получить элемент, на который нажали, вот так:

var elem = document.elementFromPoint(e.clientX, e.clientY);

Я также могу получить строку следующим образом:

var tr = elem.closest("tr");

Теперь я хочу построить массив пар имя / значение из ячеек, где имя - это имя поля данных, а значение - внутренний текст ячейки, поэтому я делаю это:

var set = []; 

$.each(tr.cells, function(cell) { 
    set.push({name : cell.dataset.field, value : cell.innerText}); 
});

Но я получаю эту ошибку:

Uncaught TypeError: Невозможно прочитать свойство 'field' из неопределенного
в HTMLTableCellElement. (1: 80)
в Function.each (jquery.min.js: 2)
в: 1: 17

Вот как это выглядит в консоли инструментов Chrome dev:

enter image description here

Вот часы на tr, где выделенная часть показывает field, который я ищу.

enter image description here

Я почти уверен, что смогу превратить массив пар имя / значение в объект после того, как получу его, например. с JSON.parse() или чем-то.


Так что не так с моим кодом или моим подходом? Есть ли более лаконичный или более эффективный способ сделать то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 11 января 2019

Вам просто не хватает порядка обязательных параметров для $.each() (индекс - это первый параметр, а затем элемент). Так что вам просто нужно изменить его на что-то вроде:

$.each(tr.cells, function(index, elem) {
  set.push({
    name: elem.dataset.field,
    value: elem.innerText
  });
});
...