8

我想<p>通过选择第二个<p>并使用previousSibling属性来定位 div 内的第一个,但它不起作用。

<div id="par">
<p id="p1">test</p>
<p id="p2">test</p>
</div>


document.getElementById('p2').previousSibling.className = 'red';

编辑:

好的,它适用于除 IE8 之外的所有浏览器,但我希望它也适用于 IE8,我尝试了以下条件但没有效果:

var c = document.getElementById('p2').previousElementSibling.className = 'red';

if (c == undefined) {

    c = document.getElementById('p2').previousSibling.className = 'red';
}

它仍然可以在任何地方使用,但 IE8 除外。如何更改 IE8 的上述条件?

编辑2:

设法让它在 IE8 中也能工作:

var c = document.getElementById('p2');

if (c.previousElementSibling) {

    c.previousElementSibling.className = 'red';

} else {

    c.previousSibling.className = 'red';

}
4

2 回答 2

9

您需要使用previousElementSibling来获取上一个 Element 节点。

document.getElementById('p2').previousElementSibling.className = 'red';

http://jsfiddle.net/b6Bh8/

注意:根据上面的 MDN 链接,这不适用于 IE <= 8。您可能需要遍历,previousSibling直到找到一个元素节点。

于 2013-05-19T10:08:54.963 回答
2

我相信这将是最简单的方法:

var p=document.getElementById('p2');
do {
    p=p.previousSibling;
}while(p && p.tagName!='P');
p.className='red';
于 2013-05-19T10:27:04.787 回答