tab切換在web開(kāi)發(fā)中很常見(jiàn)。請(qǐng)問(wèn)如何用最少、最易維護(hù)的代碼實(shí)現(xiàn)如下圖的功能:點(diǎn)擊左側(cè)tab,右側(cè)切換不同的內(nèi)容。
類庫(kù)使用jQuery。無(wú)需思路,只求代碼,看看各位大神是怎么實(shí)現(xiàn)的。感激不盡
html結(jié)構(gòu)
<p class="catalogue-content">
<ul class="catalogue-parent">
<li class="selected">男裝</li>
<li>女裝</li>
<li>童裝</li>
</ul>
<p class="catalogue-child">
<p class="catalogue-list">
<p class="catalogue-line">
<a href="#">男裝1</a>
<a href="#">男裝2</a>
</p>
</p>
</p>
<p class="catalogue-child" style="display: none;">
<p class="catalogue-list">
<p class="catalogue-line">
<a href="#">女裝1</a>
<a href="#">女裝2</a>
</p>
</p>
</p>
<p class="catalogue-child" style="display: none;">
<p class="catalogue-list">
<p class="catalogue-line">
<a href="#">童裝1</a>
<a href="#">童裝2</a>
</p>
</p>
</p>
</p>
你這是要腦洞大開(kāi)的節(jié)奏啊,那就先拋磚引玉了,在數(shù)據(jù)上要做一下改動(dòng).
首先聲明,下面的代碼沒(méi)有經(jīng)過(guò)測(cè)試的,只是順手而為的,正確性自己試驗(yàn)了
<ul class="catalogue-parent">
<li class="selected" data-index="0">男裝</li>
<li data-index="1">女裝</li>
<li data-index="2">童裝</li>
</ul>
var $catalogueChild = $('.catalogue-child');
$('ul.catalogue-parent').find('li').on('click', function() {
$catalogueChild.hide().eq($(this).attr('data-index')).show();
});
或者這樣呢
var $catalogueChild = $('.catalogue-child');
$('ul.catalogue-parent').find('li').each(function(i) {
$(this).on('click', function() {
$catalogueChild.hide().eq(i).show();
});
});
<script>
$(function(){
$(".catalogue-parent li").bind("click",function(){
$(".catalogue-child").hide().eq($(".catalogue-parent li").index(this)).show();
})
})
</script>
易維護(hù)要看怎么個(gè)維護(hù)法,比如加減tab是維護(hù)?橫的變豎的是維護(hù)?改顏色改大小算維護(hù)?鼠標(biāo)點(diǎn)擊改上浮算維護(hù)?還是只要沒(méi)bug不用改就算維護(hù)了?
總之“最易維護(hù)”是偽命題
另外,看代碼是學(xué)不到思想的,別說(shuō)思想了,就算是算法也很難看代碼就看懂
代碼如果下
$(function(){
//綁定tab的點(diǎn)擊事件
$('.catalogue-parent > li').on('click',function(){
if($(this).hasClass('selected')){ //點(diǎn)擊的是當(dāng)前顯示的 li
return false; //直接返回
} else { //點(diǎn)擊的不是當(dāng)前顯示的 li
$(this).siblings('.selected').removeClass('selected')
.end().addClass('selected'); //給點(diǎn)擊的 li, 添加selected
var indexOfthis = $(this).index('.catalogue-parent > li');
$('.catalogue-child').hide().eq(indexOfthis).show(); //顯示對(duì)應(yīng)的內(nèi)容
return false;
}
});
});