使用纯javascript在特定元素之前和之后查找元素

时间:2012-07-13 17:15:14

标签: javascript

列出包含以下链接的列表:

<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不支持 nextElementSiblingpreviousElementSibling,因此请发布这些浏览器也支持的解决方案。谢谢。

2 个答案:

答案 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;

JS Fiddle demo

参考文献: