JavaScript: добавить поплавки в цикле - PullRequest
0 голосов
/ 06 октября 2018

У меня есть функция filter , основанная на this , которая скрывает строки таблицы.Я хочу добавить значения float из таблицы, если строка не скрыта, а затем заменить исходное поле sum под таблицей.До сих пор я получил следующее, но по какой-то причине это не сработало, и я не могу понять, почему:

function filter() {
  var input, filter, table, tr, origresults, origsum, newresults, newsum, td, i;
  input = document.getElementById("input");
  filter = input.value.toUpperCase();
  table = document.getElementById("list");
  tr = table.getElementsByTagName("tr");
  origresults = document.getElementById("results");
  origsum = document.getElementById("sum");
  newresults = 0;
  newsum = 0.0;

  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];

    if (td) {
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
        newresults++;
        newsum += parseFloat(td);
      } else {
        tr[i].style.display = "none";
      }
    }
  }

  origresults.innerHTML = newresults;
  origsum.innerHTML = parseFloat(newsum).toFixed(2);
}

Это всегда говорит NaN, но я не могу понять, почему.

newsum = parseFloat(newsum) + parseFloat(td); тоже не работает.

1 Ответ

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

Моя ошибка заключалась в том, чтобы вычислить с td вместо td.innerHTML.Таким образом, функция parseFloat вернула NaN, потому что td явно содержит полный тег, а не только его содержимое.

Это работает:

function filter() {
  var input, filter, table, tr, origresults, origsum, newresults, newsum, td, i;
  input = document.getElementById("input");
  filter = input.value.toUpperCase();
  table = document.getElementById("list");
  tr = table.getElementsByTagName("tr");
  origresults = document.getElementById("results");
  origsum = document.getElementById("sum");
  newresults = 0;
  newsum = 0.0;

  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];

    if (td) {
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
        newresults++;
        newsum += parseFloat(td.innerHTML);
      } else {
        tr[i].style.display = "none";
      }
    }
  }

  origresults.innerHTML = newresults;
  origsum.innerHTML = parseFloat(newsum).toFixed(2);
}
...