Отображать блокировку и && нет повторяющейся проблемы с Javascript

У меня есть простой html table, у которого есть имя, ежемесячный доход и доход. Я написал простую функцию, которая принимает значения <tds>, но только ежемесячный доход и доход. Если они оба равны 0, одним щелчком мыши скройте все <tr>, и, если хотите, вы можете снова показать <tr> .. Мой код работает нормально. ПРОБЛЕМА в том, что когда я нажимаю hide, а затем показываю ... он возвращает мне ненормальный результат конкретного <tr>, я серьезно не знаю почему ...

function hideZeros() {
  let trs, tds, td1, td2, total, i;

  trs = document.getElementsByTagName("tr");

  for (i = 1; i < trs.length; i++) {

    tds = trs[i].getElementsByTagName("td");

    td1 = parseInt(tds[1].innerHTML);
    td2 = parseInt(tds[2].innerHTML);

    total = (td1 + td2);

    if (total === 0) {
      if (trs[i].style.display === "none") {
        trs[i].style.display = "block";

      } else {
        trs[i].style.display = "none";
      }
    }

  }

}
<table>
  <tr>
    <th>Name</th>
    <th>Monthly Income</th>
    <th>Income</th>
  </tr>

  <tbody>
    <tr>
      <td>Jim</td>
      <td>0</td>
      <td>0</td>
    </tr>
    <tr>
      <td>Joe</td>
      <td>100.000</td>
      <td>50.000</td>
    </tr>
  </tbody>
</table>

<button onclick = "hideZeros()" class = "btn btn-primary" type = "button">Click</button>

Вы можете вставить его как фрагмент?

TechySharnav 30.03.2021 11:46

Есть ли причина, по которой вы реконструируете «объем функций» переменных var с помощью let?

Andreas 30.03.2021 11:49

@ Андрей, что ты имеешь в виду под reconstruct? Я должен использовать var вместо let?

Markos 30.03.2021 11:52

Нет, абсолютно нет! Но переменные должны быть как можно более «локальными», поэтому возникает вопрос, почему вы определяете i, tds, td1 и td2 вне цикла, когда они используются только в цикле.

Andreas 30.03.2021 12:05

@Andreas, значит, вы говорите, что я должен let tds, td1, td2, total; внутри цикла

Markos 30.03.2021 12:07
for (let i = 0; ... ), let tds = trs[i]..., let td1 = ..., ... (вы не используете total ни для чего другого, кроме условия if, поэтому я бы удалил его -> if (td1 + td2 === 0) { ... })
Andreas 30.03.2021 12:22

@Andreas, ты прав, мой друг, спасибо за поправку :)

Markos 30.03.2021 12:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
30
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Значение display по умолчанию для <tr> - table-row, а не block.

Спасибо, Квентин, я изменил его в своей функции, и он отлично работает, я принимаю ваш ответ через 8 минут

Markos 30.03.2021 11:51

Ты подтолкнул меня на это ;-)

dehart 30.03.2021 11:52

@dehart На 4 минуты, так зачем вообще ответ;)

Andreas 30.03.2021 12:06

Я потратил 4 минуты, выясняя, что случилось. ¯_ (ツ) _ / ¯

dehart 30.03.2021 12:09

Это связано с тем, что по умолчанию стиль элемента tr не «блок», а «таблица-строка».

Другие вопросы по теме