列出包含以下链接的列表:
<ul>
<li><a href="#">First tab</a></li>
<li><a href="#">Second tab</a></li>
<li class="active"><a href="#">Active tab</a></li>
<li><a href="#">Fourth tab</a></li>
<li><a href="#">Fifth tab</a></li>
</ul>
如何在活动标签之前和之后找到元素? (在这种情况下,第二个和第四个标签)。
我正在寻找纯JavaScript 的解决方案,因为jQuery解决方案是here。
注意:IE8和FF3不支持 nextElementSibling
和previousElementSibling
,因此请发布这些浏览器也支持的解决方案。谢谢。
答案 0 :(得分:22)
假设您的<ul>
元素被称为element
:
var active, prev, next;
active = prev = next = element.querySelector('.active');
do prev = prev.previousSibling; while(prev && prev.nodeType !== 1);
do next = next.nextSibling; while(next && next.nodeType !== 1);
这适用于Internet Explorer 8.如果您只担心现代浏览器:
var active = element.querySelector('.active');
var prev = active.previousElementSibling;
var next = active.nextElementSibling;
答案 1 :(得分:10)
非常容易,给定一个最新的浏览器:
var activeTab = document.getElementsByClassName('active')[0],
activePrevSibling = activeTab.previousElementSibling,
activeNextSibling = activeTab.nextElementSibling;
JS Fiddle demo(可怕的,可怕的颜色......)。
以上编辑,基于Esailija留下的评论:
document.querySelector(".active")
更受支持和简洁
var activeTab = document.querySelector('.active'),
activePrevSibling = activeTab.previousElementSibling,
activeNextSibling = activeTab.nextElementSibling;
参考文献: