javascript - 使用 jQuery 获取嵌套列表中的上一个立即 li 项
问题描述
如果我有一个嵌套列表,并且我想使用 jQuery 或 Javascript 从选择器中获取列表中的上一项。问题是,这是一个嵌套列表,因此前一项可能是来自另一个 ol 的嵌套列表项。
这就是我的意思。
- 在 jQuery
#('#topic_17')
之前是 Django#('#topic_2')
- 在 Django
#('#topic_2')
之前是 Bootstrap 4#('#topic_11')
- 在 Bootstrap 4
#('#topic_11')
之前是框架#('#topic_3')
- 框架
#('#topic_3')
之前是 CSS#('#topic_5')
- CSS
#('#topic_5')
之前是HTML#('#topic_1')
- 在 HTML
#('#topic_1')
之前是 Web 开发#('#topic_13')
- 在 Web 开发
#('#topic_13')
之前什么都不是。
我看到了一些可能的方法,但如果可能的话,我真的想要一种更智能、更通用的选择方法。我能想到的以前的元素情况:
- 以前的 li 没有嵌套,所以它只是
$(selector).prev('li')
- 前一个 li 是嵌套的,所以得到最后一个 li
$(selector).prev('li').find('li').last()
- 以前的李是父母所以
$(selector).closest('ol').parent()
- 没有上一个 li 因为它是列表中的顶部项目。
有什么通用的、简单的方法可以做到这一点?
HTML 示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"
integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo="
crossorigin="anonymous"></script>
</head>
<body>
<ol class="list-group list-group-root sortable">
<li id="topic_13">
<div>
<div>
<span>Web Development</span>
</div>
</div>
<ol>
<li id="topic_1">
<div>
<div>
<span>HTML</span>
</div>
</div>
</li>
<li id="topic_5">
<div>
<div>
<span>CSS</span>
</div>
</div>
<ol>
<li id="topic_3">
<div>
<div>
<span>Frameworks</span>
</div>
</div>
<ol>
<li id="topic_11">
<div>
<div>
<span>Bootstrap 4</span>
</div>
</div>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li id="topic_2">
<div>
<div>
<span>Django</span>
</div>
</div>
</li>
<li id="topic_17">
<div>
<div>
<span>jQuery</span>
</div>
</div>
</li>
</ol>
</body>
</html>
解决方案
您可以在页面上制作所有跨度的集合。单击跨度时,在集合中找到该跨度的索引,然后在集合中引用该索引index - 1
以获取上一个:
const spans = [...document.querySelectorAll('span')];
spans.forEach((span, i) => {
span.addEventListener('click', (e) => {
console.log(spans[i - 1]);
});
});
<ol class="list-group list-group-root sortable">
<li id="topic_13">
<div>
<div>
<span>Web Development</span>
</div>
</div>
<ol>
<li id="topic_1">
<div>
<div>
<span>HTML</span>
</div>
</div>
</li>
<li id="topic_5">
<div>
<div>
<span>CSS</span>
</div>
</div>
<ol>
<li id="topic_3">
<div>
<div>
<span>Frameworks</span>
</div>
</div>
<ol>
<li id="topic_11">
<div>
<div>
<span>Bootstrap 4</span>
</div>
</div>
</li>
</ol>
</li>
</ol>
</li>
</ol>
</li>
<li id="topic_2">
<div>
<div>
<span>Django</span>
</div>
</div>
</li>
<li id="topic_17">
<div>
<div>
<span>jQuery</span>
</div>
</div>
</li>
</ol>
spans[i - 1]
给你<span>
,当然。如果要导航到它的包含<li>
,请检查跨度是否存在,如果存在,请执行.closest('li')
.
推荐阅读
- python - 将文本文件转换为字符串或列表
- webpack - 无法将 Saxon-JS 2 与 Webpack 一起使用
- javascript - 尝试更改语言后jQuery datepicker不显示
- javascript - 使用正则表达式解析 CSV
- autodesk-forge - 金属材料在 Forge 模型查看器中不起作用
- python - 如何在单击后停止 onscreenclick()
- unity3d - 由于设备重置/删除,Unity 无法呈现 D3D11 交换链
- java - 微服务不从 spring-cloud-config-server 微服务中获取属性
- arrays - 使用 React TypeError 的库存管理系统:无法读取未定义的属性“地图”
- javascript - 为其赋值时javascript对象的奇怪行为