javascript - 如何删除第二个上一课?
问题描述
我有导航菜单。如果我单击另一个按钮,它会从该按钮中删除 .active 并将其添加到单击的按钮中。我只想将类“previousButton”添加到上一个按钮。我的解决方案为所有上一个按钮提供上一个类。
$(".btn").first().addClass("active");
$(".btn").focus(function(){
$(this).siblings("button").removeClass("active");
$(this).addClass("active");
if($(this).hasClass("active")) {
$(this).prevAll().addClass("previous");
}
$(".previous").last().addClass("previousButton");
});
.active {color:green};
.previous {color: white};
.previousButton {color: pink};
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="buttons">
<button class="btn" >1. Page</button>
<button class="btn">2. Page</button>
<button class="btn">3. Page</button>
<button class="btn">4. Page</button>
<button class="btn">5. Page</button>
</div>
解决方案
您正在将该类添加到所有以前的兄弟姐妹中,因为这正是您通过prevAll()
.
相反,您可以在删除类的同一行中添加此类active
,前提是您修改选择器以专门针对当前具有的元素active
,而不是所有button
同级元素。
$(this).siblings(".active").removeClass("active").addClass('previous');
此外,您的条件是不必要的,因为它总是会解析为 true:
if ($(this).hasClass("active")) { //<-- always true - we added the class in the previous line
把它们放在一起:
$(".btn").focus(function(){
$(this).siblings(".active").removeClass("active").addClass('previous');
$(this).addClass("active");
$(".previous").last().addClass("previousButton");
});
或者为了进一步减少代码,可以合并回调中的第一行和第二行:
$(this).addClass("active").siblings(".active").removeClass("active").addClass('previous');
推荐阅读
- firebase - 停止在缓存中保存 Flutter Web Firebase 托管
- kubernetes - Knative 中的服务编排
- postgresql - Postgres查询需要很长时间
- amazon-web-services - Redshift Cluster Resize [磁盘空间不足]
- javascript - 创建新日期时日期无效?
- python - 在 Neo4j 密码中使用可选匹配范围内的地图
- android - 打算时第二个活动元素没有变化
- react-native - 错误:路由“Home”的组件必须是 React 组件
- linux - 使用 intel_pstate 时如何设置特定的 cpu 频率
- c - 我无法使用 Eclipse IDE 和 Code:Blocks 中包含的 .h 文件运行 C 文件