Uncaught TypeError: forEach не является ошибкой функции в функции javascript - PullRequest
0 голосов
/ 24 марта 2020

У меня есть эта ошибка

Uncaught TypeError: trList.forEach is not a function

в этой функции

function findMatchingRow(word) {
   const found = []
   const trList = document.querySelectorAll('#main_table_countries_today > tbody > tr')
   trList.forEach(function(tr, i) {
       if(tr.textContent.match(word)) {
           found.push({index: i, content: tr.textContent})
       }
       })
       return found
   }

{const matches = findMatchingRow('Tunisia')
 console.log(matches)
 if(matches.length > 0) {
     console.log('found at:', matches.map(function(m) { return m.index; }))}}

Эта проблема связана с совместимостью с ES6, я думаю

Ответы [ 4 ]

0 голосов
/ 24 марта 2020

Редактировать:

Использовать for l oop примерно так:
for (var i = 0; i < trList.length; i++) { ... }
и внутри него заменить tr на trList[i]
Возможно, вам понадобится удалить одну ), которая заканчивалась открывающей скобкой forEach l oop, которую вы только что заменили.

Оригинальный ответ :

Попробуйте изменив четвертую строку в вашем коде следующим образом:
Array.prototype.forEach.call(trList, function (tr, i) {

0 голосов
/ 24 марта 2020

Попробуйте это:

const trList = Array.from(document.querySelectorAll('#main_table_countries_today > tbody > tr'))
0 голосов
/ 24 марта 2020

querySelectorAll() возвращает nodeList. Преобразуйте его в массив, используя Array.from():

const trList = Array.from(document.querySelectorAll('#main_table_countries_today > tbody > tr'))'
0 голосов
/ 24 марта 2020

QuerySelectorAll возвращает nodeList, который не является истинным JS массивом. Вы должны преобразовать это в истинный JS Array, который имеет все методы Array.

Я создал вспомогательную функцию, которая делает это для меня.

 function nodeListToArray(elem){
    return [].slice().call(elem);
 }

Затем вы используете его как this.

const trList = document.querySelectorAll('#main_table_countries_today > tbody > tr');
const trArr = nodeListToArray(trList);

«trArr» будет иметь метод forEach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...