如何用JavaScript/jQuery在页面重载后保存切换按钮状态
用localStorage保存表格列的显示/隐藏状态
要解决页面刷新后隐藏列恢复显示的问题,只需在原代码基础上加入localStorage的读写逻辑,保存隐藏列的索引,页面加载时再读取并恢复状态。
修改后的完整代码
JavaScript
jQuery($ => { const $headings = $('.heading'); // 定义存储键名,用于localStorage const STORAGE_KEY = 'hiddenColumns'; // 从localStorage读取隐藏列列表,没有则初始化空数组 let hiddenColumns = JSON.parse(localStorage.getItem(STORAGE_KEY)) || []; // 页面加载时恢复隐藏状态 hiddenColumns.forEach(index => { $(`.col${index}`).hide(); }); // 初始化计算colspan updateColspan(); $('.hide').on('click', e => { const targetIndex = e.target.dataset.targetIndex; const $el = $(`.col${targetIndex}`); // 切换显示状态 $el.toggle(); // 更新隐藏列列表 if ($el.is(':hidden')) { hiddenColumns.push(targetIndex); } else { hiddenColumns = hiddenColumns.filter(idx => idx !== targetIndex); } // 保存到localStorage localStorage.setItem(STORAGE_KEY, JSON.stringify(hiddenColumns)); // 更新colspan updateColspan(); }); // 封装计算colspan的函数,复用代码 function updateColspan() { const visibleCount = $('table tbody tr:first > td:visible').length; const colspan = visibleCount / $headings.length; $headings.prop('colspan', colspan); } });
CSS
table, th, td { border: 1px solid black; }
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <thead> <tr> <th class="heading" colspan="7">abcd</th> <th class="heading" colspan="7">abcd</th> <th class="heading" colspan="7">abcd</th> <th class="heading" colspan="7">abcd</th> </tr> </thead> <tbody> <tr> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> </tr> <tr> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> </tr> <tr> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> </tr> <tr> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> <td class="col1">col1</td> <td class="col2">col2</td> <td class="col3">col3</td> <td class="col4">col4</td> <td class="col5">col5</td> <td class="col6">col6</td> <td class="col7">col7</td> </tr> </tbody> </table> <br> <button class="hide" data-target-index="1">1</button> <button class="hide" data-target-index="2">2</button> <button class="hide" data-target-index="3">3</button> <button class="hide" data-target-index="4">4</button> <button class="hide" data-target-index="5">5</button> <button class="hide" data-target-index="6">6</button> <button class="hide" data-target-index="7">7</button>
关键逻辑说明
- 读取与初始化:页面加载时从
localStorage读取之前保存的隐藏列数组,没有则初始化为空数组,遍历数组把对应列隐藏。 - 状态更新:点击按钮切换列显示状态时,更新隐藏列数组——隐藏时加入数组,显示时从数组移除,再把数组转成字符串保存到
localStorage(localStorage仅支持存储字符串)。 - 复用计算逻辑:把计算
colspan的代码封装成函数,初始化和点击时都调用,避免重复代码。
内容的提问来源于stack exchange,提问作者aastha
相关产品推荐
相关产品推荐

