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

JS使用Array.prototype.indexOf.call获取节点索引时如何排除指定元素

你可以先将父节点的子元素转为真实数组,按照你的需求过滤掉不需要计数的元素后,再查找目标元素的索引即可。

适配需求的代码实现

var el = clickedElement;
var chl = el.closest('li');
var prt = chl.parentNode;
// 此处filter内写你的过滤规则,示例为仅保留li标签参与计数
var validChildren = Array.from(prt.children).filter(item => item.tagName === 'LI');
var idx = validChildren.indexOf(chl);

自定义过滤规则的示例

你可以根据自己的需求修改filter的判断逻辑,适配不同的排除场景:

  • 排除指定标签(比如排除h2标签):
    var validChildren = Array.from(prt.children).filter(item => item.tagName !== 'H2');
    
  • 排除指定类名的元素(比如排除类名为ignore-count的元素):
    var validChildren = Array.from(prt.children).filter(item => !item.classList.contains('ignore-count'));
    
  • 排除符合任意CSS选择器的元素:
    var validChildren = Array.from(prt.children).filter(item => !item.matches('h2, .ignore, [data-skip]'));
    

按照你给出的结构示例,过滤后得到的数组仅包含3个li元素,li.second在数组中的索引就是你需要的2。如果目标元素本身被过滤规则排除,返回结果会是-1,你可以根据业务需要补充对应的异常判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:27:04