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

点击div元素后,如何统计两个tag div间的可见div数量并隐藏空tag?

解决点击Element后隐藏并统计区间可见元素及Tag隐藏问题

问题背景

需要实现以下功能:

  • 点击任意.element元素后,隐藏该元素
  • 统计该元素所在的两个.tag元素之间剩余的可见.element数量
  • 当该区间内无可见.element时,隐藏对应的两个.tag元素

但使用这段代码时出现“不是函数”的报错:

var visibleLeft = $(this).closest("div.tag").nextUntil("div.tag").find("div.element:visible").length;

报错原因

.closest("div.tag")无法找到目标元素——因为.element的直接父级是.container,而.tag与.container是同级关系,closest()是向上查找父元素,所以找不到.tag,导致后续的.nextUntil()调用在非jQuery对象上,触发“不是函数”的错误。

解决方案代码

HTML结构

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tag">Tag</div>
<div class="container">
  <div class="element">Element 1</div>
  <div class="element">Element 2</div>
  <div class="element">Element 3</div>
</div>
<div class="tag">Tag</div>
<div class="container">
  <div class="element">Element 1</div>
  <div class="element">Element 2</div>
  <div class="element">Element 3</div>
  <div class="element">Element 4</div>
</div>

jQuery实现代码

$(document).on('click', '.element', function() {
  // 隐藏当前点击的元素
  $(this).hide();
  
  // 定位当前元素所在的容器
  const $container = $(this).closest('.container');
  // 获取容器前后的两个tag元素
  const $prevTag = $container.prev('.tag');
  const $nextTag = $container.next('.tag');
  
  // 统计两个tag之间所有可见的.element数量
  const visibleElementCount = $prevTag.nextUntil($nextTag).find('.element:visible').length;
  
  // 若区间内无可见元素,隐藏对应的两个tag
  if (visibleElementCount === 0) {
    $prevTag.hide();
    $nextTag.hide();
  }
});

代码说明

  1. 先通过closest('.container')找到当前元素的父容器,再用prev('.tag')和next('.tag')精准定位到区间的两个tag元素,避免找不到元素的问题。
  2. nextUntil($nextTag)会获取$prevTag之后到$nextTag之前的所有元素,再通过find('.element:visible')筛选出可见元素并统计数量。
  3. 当可见元素数量为0时,直接隐藏前后两个tag元素,满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:30:45