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

时间:2009-05-15 12:28:06

标签: javascript element hide siblings

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

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

Firebug错误为elem.nextSibling.style is undefined

4 个答案:

答案 0 :(得分:35)

这是因为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';

答案 1 :(得分:9)

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

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

从而避免了nextSibling中可能获得非Element节点(例如TextNode持有空格)的固有问题

答案 2 :(得分: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';

答案 3 :(得分:0)

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

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

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