javascript - 根据特定值获取列表中的所有先前项目?

标签 javascript jquery

我有这个列表:

<ul id="tabs-list" class="nav nav-pills">
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked" href="#registry" data-toggle="tab"></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked" href="#tab1" data-toggle="tab" data-question-id="1"><i class="tim-icons icon-bulb-63"></i></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked active show" href="#tab2" data-toggle="tab" data-question-id="3"><i class="tim-icons icon-bulb-63"></i></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link" href="#tab3" data-toggle="tab" data-question-id="2"><i class="tim-icons icon-bulb-63"></i></a></li>
</ul>

如您所见,我有第三个元素 tab#2,它具有 active 类。我的目标是获取位于 active 项之前的所有 data-question-id

输出应该是:["1"] 因为在 tab2 之前只有一个项目具有该属性。

我可以使用此代码轻松获取事件项目:

var active_id = Number($(".tab-pane.active").attr('data-question-id'));

但是我怎样才能得到 active 项的所有前一项呢?

最佳答案

这是一种使用函数式风格的纯 JS 的方法。

您查询所有具有属性 data-question-id 的选择器。然后将此数组映射到一个对象数组,其中包含问题 ID 和一个 bool 值,指示这些元素是否包含 active 类。

然后您找到第一个对象的索引 active = true 并且您对数组进行切片以获取所有先前的问题 id。

const questions = Array.from(document.querySelectorAll('a[data-question-id]'))
  .map(elem => ({
      id: elem.getAttribute('data-question-id'),
      active: elem.classList.contains('active')
   }));
  
const result = questions
    .slice(0, questions.findIndex(elem => elem.active))
    .map(elem => elem.id);
  
console.log(result)
<ul id="tabs-list" class="nav nav-pills">
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked" href="#registry" data-toggle="tab"></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked" href="#tab1" data-toggle="tab" data-question-id="1"><i class="tim-icons icon-bulb-63"></i></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link checked active show" href="#tab2" data-toggle="tab" data-question-id="3"><i class="tim-icons icon-bulb-63"></i></a></li>
   <li class="nav-item" style="width: 25%;"><a class="nav-link" href="#tab3" data-toggle="tab" data-question-id="2"><i class="tim-icons icon-bulb-63"></i></a></li>
</ul>

关于javascript - 根据特定值获取列表中的所有先前项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54421873/

相关文章:

javascript - 如何在 Meteor 中设置事件目标的文本和颜色?

javascript - 了解 javascript 提升和执行上下文

javascript - 重新加载时无法获取错误 404?

jquery - 如何在 JQgrid 中提供指向列数据的超链接并根据单击的数据导航到相应的 Url?

jquery - IE8 XSS/Jquery 问题

.animate 的 JQuery 替代品?

javascript - 从json中获取第一个值

javascript - 从 JSON 实例化对象数组

javascript - Ajax 调用以纯字符串格式返回数据。

javascript - 列出 xml 中的 xml 节点和属性名称