使用Chrome,我试图将列表中的另一个元素作为目标
<ul>
<li><a href="#" id="One">One</a></li>
<li><a href="#" id="Two">Two</a></li>
<li><a href="#" id="Three">Three</a></li>
<li><a href="#" id="Four">Four</a></li>
<li><a href="#" id="Five">Five</a></li>
</ul>
所以这起作用了
document.getElementById("Three").parentNode.setAttribute("class", "active");
但是这并不是,我很困惑为什么。
document.getElementById("Three").parentNode.previousSibling.setAttribute("class", "active");
下面是我在控制台中遇到的错误:
Uncaught TypeError: Object #<Text> has no method 'setAttribute'
发布于 2013-11-02 19:25:14
作为父元素的<li>
的前面的同级是一个文本节点(包含一个行中断),它没有setAttribute()
方法。
如果您从以下元素之间删除任何空白,则JS行将工作:
<li><a href="#" id="Two">Two</a></li><li><a href="#" id="Three">Three</a></li>
但是,您可能不希望标记全部放在一行上,因此可以尝试这样的方法来跳过文本节点:
var prev = document.getElementById("Three").parentNode.previousSibling;
while(prev.nodeType == 3)
prev = prev.previousSibling;
prev.setAttribute("class", "active");
https://stackoverflow.com/questions/19749517
复制