我有一个运行良好的 jQuery 脚本,这意味着它可以达到它的目的。
问题是:如何让这个脚本更有效率?
目前,当用户将鼠标放在(悬停)某个带有 ID 的 HTML5 部分标签时,脚本就会激活。此时脚本从包含子菜单列表的从属导航标签中删除名为“noDisplay”的现有类,因此内容对用户可见。这个子菜单列表可能有三到四级深。子菜单按类保存(subMenu1、subMenu2、subMenu3、subMenu4 等)。该脚本被编写为单独为每个给定的部分 ID 及其子级别类提供服务。
基本上,脚本通过在鼠标悬停时删除类“noDisplay”来与 DOM 交互,并在鼠标离开时恢复相同的类。(试图给出明确的解释。如果没有,请询问。)
这是一个 JSfiddle:在此处输入链接描述
我希望有人可以提出一种更有效地做到这一点的方法。可能有更多部分(#ID)和子菜单级别(每个级别一个类)。
使用CSS 属性 'display: none;' 和'显示:块;' 将是最简单的解决方案,但这是不希望的,因为搜索机器人决定跳过标记为对用户或屏幕阅读器不可见的内容。此处使用的“NoDisplay”类使内容对用户不可见,并保持其对屏幕阅读器的可读性(因此对大多数搜索机器人而言)。
所以基本上脚本功能保持不变,在 hover 时删除和添加类 'noDisplay'。目标是获得一个更高效的脚本,可以为每个部分使用实例变量,而不是为每个新部分编写代码并因此扩展当前脚本。
//section1$("#section1 .NavUL1 .subMenu1").hover(function(){
$(".NavUL2").removeClass("noDisplay"); //display
},function(){
$(".NavUL2").addClass("noDisplay"); //no display
});
$("#section1").hover(function(){
$("#section1 .NavUL1").removeClass("noDisplay"); //display
},function(){
$("#section1 .NavUL1").addClass("noDisplay"); //no display
});
$("#section1 .NavUL1 .subMenu1").hover(function(){
$(".NavUL2").removeClass("noDisplay"); //display
},function(){
$(".NavUL2").addClass("noDisplay"); //no display
});
//#section2
$("#section2").hover(function(){
$("#section2 .NavUL1").removeClass("noDisplay"); //display
},function(){
$("#section2 .NavUL1").addClass("noDisplay"); //no display
});
$("#section2 .subMenu1").hover(function(){
$(".subMenu1 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu1 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu2").hover(function(){
$(".subMenu2 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu2 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu3").hover(function(){
$(".subMenu3 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu3 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu4").hover(function(){
$(".subMenu4 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu4 .NavUL2").addClass("noDisplay"); //no display
});