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

使用jQuery动态获取display:block状态元素的data-index值并弹窗显示的技术问题

解决动态获取display:block元素的data-index问题

嘿,我明白你的需求啦——你现在的代码问题在于,$('.test')会选中所有class为test的元素,但直接调用.data('index')只会返回第一个匹配元素的属性值,所以你拿到的是0,而不是那个display:block的元素的1。

下面给你两种靠谱的解决方案:

方案1:使用:visible选择器(简洁版)

如果你的场景中,display:block的元素就是唯一可见的元素(没有其他可见的同class元素),可以直接用:visible选择器筛选:

var visibleItemIndex = $('.test:visible').data('index');
alert(visibleItemIndex); // 这里会弹出1

方案2:精准筛选display:block的元素(严格版)

如果你需要严格匹配style属性为display:block的元素(避免误选其他可见类型的元素,比如display:inline-block),可以用.filter()方法自定义筛选逻辑:

var targetItemIndex = $('.test').filter(function() {
  // 检查当前元素的display样式是否为block
  return $(this).css('display') === 'block';
}).data('index');
alert(targetItemIndex); // 同样会弹出1

额外提示:处理多个display:block元素的情况

如果页面中可能存在多个display:block的.test元素,上面的方法只会取第一个的data-index。要是想把所有符合条件的都弹窗显示,可以用.each()遍历:

$('.test').filter(function() {
  return $(this).css('display') === 'block';
}).each(function() {
  alert($(this).data('index'));
});

完整可运行代码

把修正后的代码整合到你的HTML里,就是这样:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a class="test" style="display:none" data-index="0" href="#">foo!</a>
<a class="test" style="display:block" data-index="1" href="#">foo!</a>
<a class="test" style="display:none" data-index="2" href="#">foo!</a>

<script>
// 这里用严格版的筛选逻辑
var targetItemIndex = $('.test').filter(function() {
  return $(this).css('display') === 'block';
}).data('index');
alert(targetItemIndex);
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:22:43