Функция .map () в путанице в массиве Jquery - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь достичь чего-то очень простого, но не могу заставить его работать должным образом.

Я перебираю td потомков tr и пытаюсь получить значенияячейка в массив.

$($("#thetable").find("tr")[0]).find("td").map(function(x) {return $(x).innerText;});

Что я делаю не так?

jsFiddle , если это поможет.

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Как обычно, для jQuery-подобных методов первым аргументом является index , а не рассматриваемый элемент.Другая проблема заключается в том, что innerText является свойством простого элемента , а не коллекции jQuery - либо используйте версию jQuery (.text()), либо сначала не преобразовывайте элемент в коллекцию jQuery:

var rows = $("#thetable").find("tr")
var test = $(rows[0]).find("td").map(function(_, x) { return x.innerText;});
console.log(test);
  <table id="thetable">
  <tr>
    <td>20</td>
    <td>2</td>
    <td>10</td>
    <td>30</td>
    <td>50</td>
  </tr>
  </table>
</div>

Конечно, использование .map в коллекции jQuery даст вам в ответ коллекцию jQuery - если вы этого не хотите, либо вызовите .get() по результату, чтобы преобразовать его в массив

var test = $(rows[0]).find("td").map(function(_, x) { return x.innerText;}).get();

или просто использовать собственный метод массива, а не jQuery (в любом случае нет необходимости в jQuery для чего-то такого простого):

const arr = Array.prototype.map.call(
  document.querySelectorAll('#thetable td'),
  td => td.textContent
);
console.log(arr);
<div id="banner-message">
  <table id="thetable">
  <tr>
    <td>20</td>
    <td>2</td>
    <td>10</td>
    <td>30</td>
    <td>50</td>
  </tr>
  </table>
</div>
0 голосов
/ 22 октября 2018

Значение x хранит индекс найденного элемента, а не элемента, используйте this, чтобы получить текущий элемент, и text(), чтобы получить внутренний текст:

var rows = $("#thetable").find("tr")
console.log($(rows[0]).find("td"));
var test = $(rows[0]).find("td").map(function(x) {return $(this).text();});
console.log(test);

demo

Чтобы преобразовать объект jquery в простой массив, используйте метод get()

console.log(test.get());
...