我目前正在写 Accordion ,遇到了与nextSibling difference between IE and FF?中描述的相同的问题-特别是Microsoft的nextSibling / nextElementSibling与其他所有人实现的区别。

由于各种原因,不能选择使用jquery。也没有让我所有的MS用户升级到MSIE9

目前,我正在使用以下代码来解决此问题:

// tr is a TR doc element at entry....
while (nthRow--) {
     // for Chrome, FF tr=tr.nextElementSibling; for MSIE...tr=tr.nextSibling;
     tr=tr.nextElementSibling ? tr.nextElementSibling : tr=tr.nextSibling;
     if (!tr || tr.nodeName != "TR") {
            break;
     }
     tr.style.display="";
}

这似乎在MSIE6,FF和Chrome中达到了我的期望-即使初始TR下方的nthRow TR元素可见(以前为style.display =“none”)。

但这可能会带来意想不到的副作用吗?

(我是Java的新手;)

最佳答案

nextSibling将看到HTML代码注释,因此请务必将其保留。

除此之外,您应该没问题,因为在tr元素之间没有任何文本节点。

我唯一想到的另一个问题是Firefox 3,而nextElementSibling尚未实现。因此,如果您支持该浏览器,则需要手动模拟nextElementSibling。 (虽然可以肯定他们已经在FF3.5中实现了它。)

创建nextElementSibling()函数会更安全:

tr = tr.nextElementSibling || nextElementSibling(tr);

function nextElementSibling( el ) {
    do { el = el.nextSibling } while ( el && el.nodeType !== 1 );
    return el;
}

07-26 06:47