javascript - 使用javascript向第一个 child 添加类(class)

标签 javascript

这个链条不工作有什么原因吗?它不添加类:

document.getElementsByTagName('nav')[0].firstChild.className = "current"

它应该返回 nav 元素的第一个子元素,它是一个 <a>。这不会发生。

感谢您的帮助!

最佳答案

那是因为你有 text nodesnav 之间和 a .您可以通过 nodeType 过滤它们:

var childNodes = document.getElementsByTagName('nav')[0].childNodes;
for (var i = 0; i < childNodes.length; i++) {
    if (childNodes[i].nodeType !== 3) { // nodeType 3 is a text node
      childNodes[i].className = "current";  // <a>
      break;
    }        
}

这可能看起来很奇怪,但是,例如,如果您有以下标记:

<nav>
<a>afsa</a>
</nav>

这是一个 DEMO .

为什么会这样?因为 一些 浏览器可能会解释 <nav> 之间的空格和 <a>作为一个额外 文本节点。因此,firstChild将不再有效,因为它将返回文本节点。

如果您有以下标记,它会是 work :

<nav><a>afsa</a></nav>

关于javascript - 使用javascript向第一个 child 添加类(class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12361616/

相关文章:

javascript - 如何删除数组映射中的最后一个\t(制表符)

javascript - 试图理解闭包。有人可以引导我完成这段代码吗?

javascript - 我真的需要在 javascript ES6 类中使用 setter/getter 吗?

javascript - Vuejs 事件处理程序中是否需要 $event?

javascript - 如何在 html 输入字段中的单个单词下方显示弹出窗口/工具提示

javascript - 需要 Bootstrap 列帮助

javascript - Angular $q 未按预期工作 - 返回未定义

javascript - 单击复选框将内部表值复制到外部表

javascript - Selenium 扩展 : "blocking" commands

javascript - 使用 FTP jquery 上传图片检查图片是否加载