15

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

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

Firebug 错误是elem.nextSibling.style is undefined.

4

4 回答 4

36

这是因为 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';
于 2009-05-15T12:31:43.483 回答
13

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

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

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

于 2013-03-10T12:43:54.663 回答
2

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

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

do {
   elem = elem.nextSibling;
} while(element && elem.nodeType !== 1); // 1 == Node.ELEMENT_NODE
if(elem) elem.style.display = 'none';
于 2009-05-15T12:32:49.143 回答
0

尝试使用以下方法循环遍历此元素的子元素:

var i=0;
(foreach child in elem)
{
   if (i==0)
   {
     document.getElementByID(child.id).style.display='none';
    }
}

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

于 2009-05-15T12:35:58.560 回答