在微博等大型團隊中,頁面重構工程師(HTML/CSS)與JS前端工程師是分離崗位。重構工程師產出高質量靜態頁,JS工程師實現交互邏輯。理想狀態是雙方前期充分溝通、約定DOM結構與API契約;現實卻常是:重構階段JS資源未就位,重構師需預判交互實現、預留擴展鉤子、兼顧語義化、兼容性、性能、未來功能擴展——壓力巨大。

需求:首頁右側第一屏,金牌榜模塊,含「展開/收起」切換,展開顯示完整榜單+賽事重點,收起僅顯前三名。
常規實現:兩個獨立DOM結構(展開版/收起版),JS切換顯隱。代碼冗餘、維護困難、首屏渲染負擔重。

核心思想:所有狀態的DOM結構一次性輸出,CSS負責顯隱與樣式切換,JS僅切換容器ClassName。將「展開態」與「收起態」所有DOM節點共存於同一容器,通過Class控制顯隱。
<div class="turn_olym_on"> <!-- 默認展開態 -->
<table class="medal_list">...完整榜單...</table>
<div class="show_more">賽事重點</div>
<a class="W_moredown" href="#">收起</a>
<!-- 收起態專用節點,默認隱藏 -->
<tr class="no_45">...第4-5名...</tr>
<a class="W_moreup" href="#">展開</a>
</div>

/* 默認展開態:隱藏收起態專用元素 */
.turn_olym_on .no_45,
.turn_olym_on .W_moreup { display: none; }
/* 收起態:隱藏展開態專用元素,顯示收起態元素 */
.turn_olym_off .medal_list tbody tr:nth-child(n+4) { display: none; }
.turn_olym_off .show_more,
.turn_olym_off .W_moredown { display: none; }
.turn_olym_off .no_45,
.turn_olym_off .W_moreup { display: table-row; /* 或 block */ }




// 僅需切換容器Class
$('.toggle_btn').on('click', function() {
$('.medal_container').toggleClass('turn_olym_on turn_olym_off');
});
元芳,你怎麼看?歡迎在評論區分享你的協作經驗與踩坑教訓。