Nodejs相关问题:鼠标移到二级菜单的时候,上一级菜单的样式会改变(涉及Nodejs前端交互)
Nodejs相关问题:鼠标移到二级菜单的时候,上一级菜单的样式会改变(涉及Nodejs前端交互)
<ul id="globalNav" >
<li id="gn-home"><a href="">网站首页</a></li>
<li id="gn-about" onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)" class="aa"><a href="" class="bb">关于霖鹰</a>
<ul>
<li id="sm-1"><a href="#">厨房食物垃圾处理器</a></li>
<li id="sm-22"><a href="#" class="cc">厨房食物垃圾处理器</a></li>
<li id="sm-3"><a href="#">厨房食物垃圾处理器</a></li>
</ul>
</li>
<li id="gn-news"><a href="">新闻中心</a></li>
<li id="gn-product"><a href="">产品中心</a></li>
<li id="gn-case"><a href="">应用案例</a></li>
<li id="gn-service" onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)" class="aa"><a href="" class="bb">客户服务</a>
<ul>
<li id="sm-1"><a href="#" class="cc">厨房食物垃圾处理器</a></li>
<li id="sm-2"><a href="#">厨房食物垃圾处理器</a></li>
<li id="sm-3"><a href="#">厨房食物垃圾处理器</a></li>
</ul>
</li>
<li id="gn-joining"><a href="">招商加盟</a></li>
<li id="gn-activity" onmouseover="displaySubMenu(this)" onmouseout="hideSubMenu(this)"><a href="">主题活动</a></li>
<li id="gn-user"><a href="">会员中心</a></li>
<li id="gn-contact"><a href="">联系我们</a></li>
</ul>
<script type="text/javascript">
//鼠标移到二级菜单的时候,上一级菜单的样式会改变
$("#globalNav li ul li a").hover( function () { $(’.cc’).parent().parent().parent(’.aa’).children(".bb").addClass(“on”); }, function () { $(’.bb’).removeClass(“on”); } ); </script>
功能是可能实现的,如图所示,可是当我鼠标移到二级菜单的时候,所有class 是bb 的都会加上on样式。我只要当前二级菜单的上一级菜单的样式变掉,又不想写很多重复的代码每个菜单项都用ID来定义。
针对您的需求,我们可以使用 jQuery 来处理鼠标悬停事件,并且只改变当前上一级菜单的样式,而不是所有的。以下是修改后的 HTML 和 JavaScript 代码:
HTML 结构
<ul id="globalNav">
<li id="gn-home"><a href="">网站首页</a></li>
<li id="gn-about" class="aa"><a href="" class="bb">关于霖鹰</a>
<ul>
<li id="sm-1"><a href="#">厨房食物垃圾处理器</a></li>
<li id="sm-22"><a href="#" class="cc">厨房食物垃圾处理器</a></li>
<li id="sm-3"><a href="#">厨房食物垃圾处理器</a></li>
</ul>
</li>
<li id="gn-news"><a href="">新闻中心</a></li>
<li id="gn-product"><a href="">产品中心</a></li>
<li id="gn-case"><a href="">应用案例</a></li>
<li id="gn-service" class="aa"><a href="" class="bb">客户服务</a>
<ul>
<li id="sm-1"><a href="#" class="cc">厨房食物垃圾处理器</a></li>
<li id="sm-2"><a href="#">厨房食物垃圾处理器</a></li>
<li id="sm-3"><a href="#">厨房食物垃圾处理器</a></li>
</ul>
</li>
<li id="gn-joining"><a href="">招商加盟</a></li>
<li id="gn-activity" class="aa"><a href="">主题活动</a></li>
<li id="gn-user"><a href="">会员中心</a></li>
<li id="gn-contact"><a href="">联系我们</a></li>
</ul>
JavaScript 代码
$(document).ready(function() {
$("#globalNav li ul li a").hover(
function() {
// 找到当前悬停的 a 标签的父元素 ul,再找到它的父元素 li,然后找到这个 li 的父元素 li(即上一级菜单的 li),最后给这个 li 的 a 标签添加 "on" 类。
$(this).parent().parent().parent().prev("li").find(".bb").addClass("on");
},
function() {
// 鼠标离开时移除 "on" 类
$(this).parent().parent().parent().prev("li").find(".bb").removeClass("on");
}
);
});
解释
-
HTML 结构:
- 我们保持了原始的 HTML 结构,只是去掉了
onmouseover
和onmouseout
属性。
- 我们保持了原始的 HTML 结构,只是去掉了
-
JavaScript 代码:
- 使用
$(document).ready()
确保 DOM 完全加载后再执行脚本。 - 使用
.hover()
方法绑定鼠标进入和离开事件。 - 在鼠标进入时,找到当前悬停的
<a>
标签的父元素<ul>
,再找到这个<ul>
的父元素<li>
,接着找到这个<li>
的父元素<li>
(即上一级菜单的<li>
),最后给这个<li>
中的<a>
标签添加"on"
类。 - 在鼠标离开时,移除
"on"
类。
- 使用
这样可以确保每次鼠标悬停在二级菜单上时,只有当前上一级菜单的样式会改变,而不会影响其他菜单项。
阻止冒泡,LZ需恶补Javascript高级第三版
为了实现仅当鼠标悬停在特定二级菜单时,对应的上一级菜单项样式改变的功能,你可以使用jQuery选择器和事件处理函数来实现。下面是改进后的JavaScript代码示例:
<script type="text/javascript">
$(document).ready(function(){
$("#globalNav > li").hover(
function () {
$(this).find('.cc').addClass("on");
},
function () {
$(this).find('.cc').removeClass("on");
}
);
});
</script>
<style>
.on {
/* 定义你的样式 */
color: red; /* 示例样式 */
}
</style>
在这个示例中,我们使用了#globalNav > li
选择器来针对直接子元素li
进行操作。当鼠标悬停在某个列表项(包含二级菜单的列表项)上时,它会查找并添加on
类到该列表项内的.cc
元素的父元素的父元素的兄弟元素(即<a>
标签)。当鼠标移出时,移除on
类。
注意,这段代码需要与jQuery库一起运行。如果你的应用程序中还没有引入jQuery,你需要先引入jQuery库文件。
这种方法避免了为每个菜单项使用不同的ID,从而减少了代码冗余。