У меня есть простой 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>Есть ли причина, по которой вы реконструируете «объем функций» переменных var с помощью let?
@ Андрей, что ты имеешь в виду под reconstruct? Я должен использовать var вместо let?
Нет, абсолютно нет! Но переменные должны быть как можно более «локальными», поэтому возникает вопрос, почему вы определяете i, tds, td1 и td2 вне цикла, когда они используются только в цикле.
@Andreas, значит, вы говорите, что я должен let tds, td1, td2, total; внутри цикла
for (let i = 0; ... ), let tds = trs[i]..., let td1 = ..., ... (вы не используете total ни для чего другого, кроме условия if, поэтому я бы удалил его -> if (td1 + td2 === 0) { ... })
@Andreas, ты прав, мой друг, спасибо за поправку :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Значение display по умолчанию для <tr> - table-row, а не block.
Спасибо, Квентин, я изменил его в своей функции, и он отлично работает, я принимаю ваш ответ через 8 минут
Ты подтолкнул меня на это ;-)
@dehart На 4 минуты, так зачем вообще ответ;)
Я потратил 4 минуты, выясняя, что случилось. ¯_ (ツ) _ / ¯
Это связано с тем, что по умолчанию стиль элемента tr не «блок», а «таблица-строка».
Вы можете вставить его как фрагмент?