鍍金池/ 問答/HTML/ 我寫了一個(gè)用jquery的menu,但我覺得似乎可以簡寫,請問這段如何簡寫?

我寫了一個(gè)用jquery的menu,但我覺得似乎可以簡寫,請問這段如何簡寫?

$("#menu_sub,#menu_sub2,#menu_sub3").hide();

$("#menu").mouseenter(function() {
  $("#menu_sub2,#menu_sub3").slideUp();
  $("#menu2,#menu3").css('color', '');

  $("#menu_sub").slideDown();
  $("#menu").css('color', '#46a9ff');
});

$("#menu2").mouseenter(function() {
  $("#menu_sub,#menu_sub3").slideUp();
  $("#menu,#menu3").css('color', '');

  $("#menu_sub2").slideDown();
  $("#menu2").css('color', '#46a9ff');
});

$("#menu3").mouseenter(function() {
  $("#menu_sub,#menu_sub2").slideUp();
  $("#menu,#menu2").css('color', '');

  $("#menu_sub3").slideDown();
  $("#menu3").css('color', '#46a9ff');
});
<div id="menu" class="menu">xxx</div>
<div id="menu_sub">
  <div class="menu_sub">1</div>
  <div class="menu_sub">2</div>
  <div class="menu_sub">3</div>
</div>

<div id="menu2" class="menu">ddd</div>
<div id="menu_sub2">
  <div class="menu_sub">1</div>
  <div class="menu_sub">2</div>
  <div class="menu_sub">3</div>
</div>

<div id="menu3" class="menu">aaa</div>
<div id="menu_sub3">
  <div class="menu_sub">1</div>
  <div class="menu_sub">2</div>
  <div class="menu_sub">3</div>
</div>

在jquery的部分,有辦法可以縮減程式碼但是達(dá)到一樣的效果嗎?

回答
編輯回答
瘋浪

`$("#menu_sub,#menu_sub2,#menu_sub3").hide();
$(".menu").mouseenter(function(event) {

 $(this).css('color', '#46a9ff').next().slideDown();
 $(this).siblings('.menu').css('color', '').next().slideUp();

});`
這個(gè)建議你先熟悉下jq基礎(chǔ),你會發(fā)覺寫起來會很簡單。

2017年3月29日 14:07
編輯回答
巷尾

你這個(gè),tab切換嗎?

2018年3月25日 06:24
編輯回答
乖乖瀦
// 將數(shù)組內(nèi)非指定下標(biāo)的元素用 , 拼接
// 想起來 switch 好像是關(guān)鍵字不能作為函數(shù)名 改一下
var which = function(arr, index) {
    return arr.filter(function(item, _index) {
        return _index !== index;
    }).join(',');
}

var menus = ['#menu', '#menu2', '#menu3'];
var subs = ['#menu_sub', '#menu_sub2', '#menu_sub3'];

$(menus.join(',')).hide();

// 遍歷菜單數(shù)組
menus.forEach(function(menu, index) {
    $(menu).mouseenter(function(){
        // 拼接非當(dāng)前位置的所有子菜單并收起
        $(which(subs, index)).slideUp();
        // 拼接非當(dāng)前的所有菜單并重置樣式
        which(menus, index).css('color', '');
        // 展開當(dāng)前位置的子菜單
        $(subs[index]).slideDown();
        // 重置選中菜單的樣式
        menu.css('color', '#46a9ff');
    })
});

有簡潔版的,不過不知道你會用 ES5/6 之類的不:


var which = (arr, index) => arr.filter(function(item, _index) => _index !== index).join(',');

var subs = ['#menu_sub', '#menu_sub2', '#menu_sub3'];

$(menus.join(',')).hide();

['#menu', '#menu2', '#menu3'].forEach((menu, index, menus) => {
    $(menu).mouseenter(() => {
        $(which(subs, index)).slideUp();
        which(menus, index).css('color', '');
        $(subs[index]).slideDown();
        menu.css('color', '#46a9ff');
    })
});
2017年12月17日 21:19
編輯回答
入她眼
$("#menu_sub,#menu_sub2,#menu_sub3").hide();

$(".menu").mouseenter(function() {
  $(".menu").css('color', '').next().slideUp();
  $(this).css('color', '#46a9ff').next().slideDown();
});
2018年2月4日 01:14