You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery点击元素移除同辈元素激活类失效问题排查

问题分析与解决方案

嘿,我一眼就看出问题出在哪了——你用的siblings()方法找错对象啦!

为什么原来的代码无效?

看你的HTML结构,每个.klantenblokje都被包裹在独立的<div class="col-md-2">容器里。当你在点击事件里调用$(this).siblings()时,它只会查找当前<a>标签的同辈元素(也就是同一个div里的其他元素),但每个div里只有这一个<a>,所以根本碰不到其他.klantenblokje元素,自然没法移除它们的activeblok类。

修正后的代码方案

最简单直接的解决方式是:先移除所有.klantenblokje的activeblok类,再给当前点击的元素添加这个类。而且你完全不需要用.each()来绑定事件,jQuery会自动为所有匹配元素绑定点击事件:

$('.klantenblokje').on('click', function(e) {
  e.preventDefault();
  // 先移除所有目标元素的激活类
  $('.klantenblokje').removeClass('activeblok');
  // 给当前点击的元素添加激活类
  $(this).addClass('activeblok');
});

如果想优化性能(避免每次点击都重新查找DOM),可以提前缓存所有目标元素:

// 缓存所有klantenblokje元素
const $klantenItems = $('.klantenblokje');

$klantenItems.on('click', function(e) {
  e.preventDefault();
  $klantenItems.removeClass('activeblok');
  $(this).addClass('activeblok');
});

额外小技巧(不推荐但可以理解原理)

如果你非要用同辈元素的思路来实现,那得先找到当前元素父容器的同辈,再定位到里面的.klantenblokje:

$('.klantenblokje').on('click', function(e) {
  e.preventDefault();
  $(this).addClass('activeblok')
         // 找到父容器的所有同辈容器
         .parent().siblings()
         // 在这些容器里找到klantenblokje并移除类
         .find('.klantenblokje').removeClass('activeblok');
});

不过这种写法绕了个弯,不如直接选中所有目标元素来得直观,所以更推荐前面的方案。

内容的提问来源于stack exchange,提问作者twan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 13:47:45