1 回答

TA貢獻1757條經(jīng)驗 獲得超8個贊
關(guān)于未更新的 DOM,這是預(yù)期的行為,因為該data()方法僅更新 jQuery 的內(nèi)部data屬性緩存。它不會更新dataDOM 中相關(guān)元素中的屬性。
關(guān)于您的問題,主要問題是因為您在this點擊#undo處理程序中使用。那將指的是單擊的按鈕,而不是td上面的類。您只需要定位正確的元素。
另請注意,classIndex可以使用模運算符簡化邏輯。試試這個:
$(function() {
let classArray = ['classA', 'classB', 'classC'];
let arrLen = classArray.length;
let $td = $("#our_calendar td");
$td.click(function() {
let classIndex = $td.data('class-index');
$td.removeClass(classArray[classIndex]);
classIndex = ++classIndex % classArray.length;
$td.addClass(classArray[classIndex]);
$td.data('class-index', classIndex);
});
$("#undo").on('click', function() {
let classIndex = $td.data('class-index');
$td.removeClass(classArray[classIndex]);
classIndex = (--classIndex + classArray.length) % classArray.length;
$td.addClass(classArray[classIndex]);
$td.data('class-index', classIndex);
});
});
.classA { background-color: aqua; }
.classB { background-color: yellow; }
.classC { background-color: red; }
td { transition-duration: 0.4s; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="our_calendar">
<tr>
<td class="classA" data-class-index="0">Value 1</td>
</tr>
</table>
<button id="undo">undo</button>
添加回答
舉報