Есть несколько способов сделать это. Но я попытался изменить ваш исходный код как можно меньше.
Во-первых, вам нужно преобразовать id
(которые являются строками) в числа. Вы можете сделать это с parseInt. Потому что сравнивать 2 строки не правильно в этой ситуации. Потому что '2'<'10'
вернет false. Сравнение строк происходит на символьной основе. Это означает, что каждый символ сравнивается с соответствующим символом из другой строки.
Таким образом, '2'
больше, чем '10'
, потому что '2'
> '1'
в алфавитном порядке.
Во-вторых, вы должны удалить класс aqua
из всех td
при повторном нажатии на td
.
В-третьих, вам не нужен al oop. Просто проверьте, больше ли текущий идентификатор hd td, чем тот, который вы щелкнули в первый раз, а затем добавьте класс.
$(function() {
$("td").click(function() {
const first = parseInt(this.id, 10);
$(this).addClass("aqua");
const notThisTd = $('td').not(this)
notThisTd.removeClass("aqua");
notThisTd.hover(function() {
const id = parseInt(this.id, 10);
if (id > first) {
$(this).addClass("aqua");
}
});
});
});
.aqua{
background-color: aqua;
}
td {
padding: 5px
transition-duration: 0.4s;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<td id="1">1</td>
<td id="2">2</td>
<td id="3">3</td>
<td id="4">4</td>
<td id="5">5</td>
<td id="6">6</td>
<td id="7">7</td>
<td id="8">8</td>
<td id="9">9</td>
<td id="10">10</td>
</table>