使用 JavaScript 获取下一个/上一个元素?

IT技术 javascript html dom
2021-02-10 05:46:10

如何使用 JavaScript 获取 HTML 中的下一个元素?

假设我有三个<div>s 并且我在 JavaScript 代码中得到了一个的引用,我想知道哪个是下一个<div>,哪个是前一个。

6个回答

使用nextSiblingpreviousSibling属性:

<div id="foo1"></div>
<div id="foo2"></div>
<div id="foo3"></div>

document.getElementById('foo2').nextSibling; // #foo3
document.getElementById('foo2').previousSibling; // #foo1

但是在某些浏览器中(我忘了是哪个),您还需要检查空格和注释节点:

var div = document.getElementById('foo2');
var nextSibling = div.nextSibling;
while(nextSibling && nextSibling.nodeType != 1) {
    nextSibling = nextSibling.nextSibling
}

像 jQuery 这样的库开箱即用地为您处理所有这些跨浏览器检查。

@Kloar:问题询问如何获取“html 中的下一个 [div] 元素”。div标记中的下一个可能不与元素相邻;它可能更深一层或更高一层。
2021-03-24 05:46:10
nextSibling 和 previousSibling(应该)总是返回所有节点,而不仅仅是元素节点,不是吗?这包括文本节点、评论节点等。您的第二个示例看起来是一个很好的解决方案!也许你可以用 do {} while(); 来减少重复。环形?(编辑:或者可能是递归)
2021-04-01 05:46:10
如果元素不是兄弟元素,这将不起作用。
2021-04-02 05:46:10
请注意,nextSibling 和 nextElementSibling 都不是完全跨浏览器兼容的。Firefox 的 nextSibling 返回文本节点,而 IE 不返回并且 nextElementsibling 直到 IE9 才实现。
2021-04-04 05:46:10
nextElementSibling 更有用。
2021-04-08 05:46:10

真的取决于你的文档的整体结构。

如果你有:

<div></div>
<div></div>
<div></div>

它可能像遍历一样简单使用

mydiv.nextSibling;
mydiv.previousSibling;

但是,如果“下一个”div 可能位于文档中的任何位置,您将需要更复杂的解决方案。你可以尝试使用

document.getElementsByTagName("div");

并通过这些运行以某种方式到达您想要的地方。

如果您正在执行大量复杂的 DOM 遍历,例如这样,我建议您查看诸如 jQuery 之类的库。

nextSibling() .. 应该是 nextSibling,我想
2021-04-11 05:46:10

那么在纯 javascript 中,我的想法是您首先必须将它们整理到一个集合中。

var divs = document.getElementsByTagName("div");
//divs now contain each and every div element on the page
var selectionDiv = document.getElementById("MySecondDiv");

所以基本上用 selectionDiv 遍历集合以找到它的索引,然后显然 -1 = 前一个 +1 = 下一个在边界内

for(var i = 0; i < divs.length;i++)
{
   if(divs[i] == selectionDiv)
   {
     var previous = divs[i - 1];
     var next = divs[i + 1];
   }
}

请注意,正如我所说,需要额外的逻辑来检查您是否在范围内,即您不在集合的末尾或开头。

这也意味着说你有一个嵌套有子 div 的 div。下一个 div 不是兄弟姐妹而是孩子,所以如果你只想要与目标 div 处于同一级别的兄弟姐妹,那么肯定使用 nextSibling 检查tagName属性。

接缝很好的解决方案,但如何获得下一个元素,正如你现在写的那样,我有收藏和选定的,你能帮我更多吗?
2021-04-09 05:46:10

每个 HTMLElement 上都有一个属性,“previousElementSibling”。

前任:

<div id="a">A</div>
<div id="b">B</div>
<div id="c">c</div>

<div id="result">Resultado: </div>

var b = document.getElementById("c").previousElementSibling;

document.getElementById("result").innerHTML += b.innerHTML;

直播:http : //jsfiddle.net/QukKM/

这在 IE8 上失败(尚未检查其他 IE 版本)。previousSibling似乎是跨浏览器的解决方案。
2021-03-12 05:46:10

这将很容易...它是一个纯 javascript 代码

    <script>
           alert(document.getElementById("someElement").previousElementSibling.innerHTML);
    </script>