使用 Javascript 隐藏元素的下一个兄弟

Posted

技术标签:

【中文标题】使用 Javascript 隐藏元素的下一个兄弟【英文标题】:Hide an element's next sibling with Javascript 【发布时间】:2010-10-26 11:41:24 【问题描述】:

我从document.getElementById('the_id') 抓取了一个元素。我怎样才能得到它的下一个兄弟并隐藏它?我试过了,但没有用:

elem.nextSibling.style.display = 'none';

Firebug 错误为 elem.nextSibling.style is undefined

【问题讨论】:

【参考方案1】:

这是因为 Firefox 将元素节点之间的空白视为文本节点(而 IE 则不会),因此在元素上使用 .nextSibling 会在 Firefox 中获得该文本节点。

拥有一个用于获取下一个元素节点的函数很有用。像这样的

/* 
   Credit to John Resig for this function 
   taken from Pro javascript techniques 
*/
function next(elem) 
    do 
        elem = elem.nextSibling;
     while (elem && elem.nodeType !== 1);
    return elem;        

那你就可以了

var elem = document.getElementById('the_id');
var nextElem = next(elem); 

if (nextElem) 
    nextElem.style.display = 'none';

【讨论】:

elem 仍然可能为空。 不,它没有。它只是保证当elem 为“不正确”或elem.nodeType == 1 时不会访问nextSibling。但是如果没有这样的元素,elem 就只是最后一个兄弟节点,不管它是什么类型。 这里有一个例子: var elem = document.createElement("div"); elem.appendChild(document.createTextNode("foo")); elem.appendChild(document.createTextNode("bar"));警报(下一个(elem.firstChild)=== null); // “真” 只是想确认这是另一个答案***.com/a/15322350/4119808,但不是重点。有什么问题吗?【参考方案2】:

查看Element Traversal API,该API 仅在元素节点之间移动。这允许以下操作:

elem.nextElementSibling.style.display = 'none';

从而避免了 nextSibling 中固有的潜在获取非元素节点的问题(例如 TextNode 持有空白)

【讨论】:

TY TY TY TY 添加这个答案! 我认为这是最好和最简单的方法,我不明白为什么人们不专注..【参考方案3】:

Firebug 错误是 elem.nextSibling.style 未定义。

因为 nextSibling 可以是文本节点或其他节点类型

do 
   elem = elem.nextSibling;
 while(element && elem.nodeType !== 1); // 1 == Node.ELEMENT_NODE
if(elem) elem.style.display = 'none';

【讨论】:

+1 用于在访问style 属性之前检查elem 是否不为空。【参考方案4】:

尝试使用类似这样的方式遍历该元素的子元素:

var i=0;
(foreach child in elem)

   if (i==0)
   
     document.getElementByID(child.id).style.display='none';
    

请对语法进行适当的更正。

【讨论】:

以上是关于使用 Javascript 隐藏元素的下一个兄弟的主要内容,如果未能解决你的问题,请参考以下文章

仅使用 CSS 悬停时隐藏兄弟 div

Javascript 测验 - 通过 jQuery 上的 next() 方法到达下一个兄弟的问题

jquery获取指定元素下的子元素

js或jquery如何获取父级子级兄弟元素(包括祖级孙级等)

使用 XPath 和 Selenium for Java 获取下一个兄弟元素

需要找到数组中每个元素的下一个更大的元素[重复]