首页 > 解决方案 > 从 Array.prototype.indexOf.call 中排除某些元素

问题描述

var el = clickedElement;
var chl = el.closest('li');
var prt = chl.parentNode;
var idx = Array.prototype.indexOf.call(prt.children, chl);

我使用此代码从 parentNode 获取 clickedElement 的索引号..它大部分时间都有效..我希望能够从索引号中过滤掉一些元素

例如..

li.zero
li.first
h2
li.second

如果我尝试使用此代码将 li.second 元素作为索引 2,它会给我索引 '3',因为中间有 h3 标记。我怎样才能将某些元素排除在计数之外?

标签: javascriptdom

解决方案


您可以使用该Array.prototype.filter方法。

它可能看起来像这样:

var idx = Array.prototype.indexOf.call(
  Array.from(prt.children)
    .filter(domNode => domNode.tagName.toLowerCase() === "li"), 
  chl
);

现在您将只检查列表项元素的索引。


推荐阅读