如何使用vanilla Javascript识别无序和/或嵌套列表序列中的上一个/下一个链接
How can I identify the previous/next link in a sequence of unordered and/or nested lists using vanilla Javascript?
我正试图了解这个场景。
使用香草Javascript,我需要识别上一个和下一个<a>
元素,给定n中的任何给定链接-n深度的无序列表的数量。
下面是我的意思的一个示例结构:
<ul>
<li><a href="http://www.example.com/">Link 1</a></li>
<li><a href="http://www.example.com/">Link 2</a></li>
<li><a href="http://www.example.com/">Link 3</a></li>
</ul>
<ul>
<li><a href="http://www.example.com/">Link 4</a></li>
<li><a href="http://www.example.com/">Link 5</a>
<ul>
<li><a href="http://www.example.com/">Link 6</a></li>
<li><a href="http://www.example.com/">Link 7</a></li>
</ul></li>
<li><a href="http://www.example.com/">Link 8</a></li>
</ul>
<ul>
<li><a href="http://www.example.com/">Link 9</a></li>
</ul>
链接8的上一个链接是链接7,下一个是链接9。
链接9的上一个链接是链接8,下一个是链接1。
等等。
在结构的一个层面上,我能够用这样的东西来解决这个问题:
function linkNext(currentFocus) {
currentFocus = currentFocus || document.activeElement;
var theNextElement;
if (currentFocus.parentNode.nextElementSibling === null) { // Last <li> in list.
if (currentFocus.parentNode.parentNode.nextElementSibling === null) { // Last list in bar.
theNextElement = window.barbarbar.querySelector('a');
} else {
theNextElement = currentFocus.parentNode.parentNode.nextElementSibling.querySelector('a');
}
} else {
theNextElement = currentFocus.parentNode.nextElementSibling.querySelector('a');
}
return theNextElement;
}
function linkPrev(currentFocus) {
currentFocus = currentFocus || document.activeElement;
var thePrevElement;
if (currentFocus.parentNode.previousElementSibling === null) { // First <li> in list.
if (currentFocus.parentNode.parentNode.previousElementSibling === null) { // First list in bar.
thePrevElement = window.barbarbar.querySelector('a:last-of-type');
} else {
thePrevElement = currentFocus.parentNode.parentNode.previousElementSibling.querySelector('li:last-of-type a');
}
} else {
thePrevElement = currentFocus.parentNode.previousElementSibling.querySelector('a');
}
return thePrevElement;
}
但这已经超出了单一的深度,我很难理解潜在的解决方案。即使我使用的是jQuery(我不是),即使是像.closest()
或.parents()
这样的东西似乎也不太适合。
有没有更好的方法呢?我真的需要在这里遍历树吗?
在我看来,你只需要保留一个所有链接的列表,并找到当前链接的位置:
var links = Array.prototype.slice.call(document.querySelectorAll('a'));
var index = links.indexOf(currentFocus);
// nextLink = links[index - 1];
// previousLink = links[index + 1];
(加上一些环绕的逻辑)
相关文章:
- 如何在ReactJs中链接下拉列表和文本区域
- 如何使用AngularJS链接下拉列表
- 点击jsp页面上的链接打开一个文件
- 我想让HTML链接打开一个js手风琴
- 链接下拉列表选择列表代码 -- 连接数据
- 使用 JavaScript 向一组链接中的第一个链接添加一个属性
- 如何创建共享单个列表的链接下拉列表,并确保只能在一个下拉列表中选择每个值
- 为链接打开一个新窗口,但希望下一页仍在“主体”框架中
- Javascript函数没有链接到下一个
- Jquery UI 选项卡:从选项卡内链接到下一个/特定选项卡
- 在涡轮链接下的 GTM(谷歌跟踪代码管理器)容器中触发代码
- 动态链接/下拉菜单
- 使用JavaScript和html将图像和超链接从一个位置随机移动到另一个位置
- 如何链接下拉菜单中的可用选项以更改图像的大小
- JS:用链接替换链接.还有一个链接
- jQuery/JavaScript我的脚本中的活动链接-下划线不正确
- Primefaces链接打开一个电子邮件撰写窗口
- CSS/JS -移除一个li元素的动画链接下划线
- 通过AJAX在Wordpress中动态更改导航链接(下一个和上一个)
- 通过点击链接添加一个新的下拉菜单框