使用javascript将类添加到第一个子级
Add class to first child using javascript
这个链不工作有什么原因吗?它不添加类:
document.getElementsByTagName('nav')[0].firstChild.className = "current"
它应该返回nav元素的第一个子元素,该元素是未发生的<a>
。
谢谢你的帮助!
这是因为在nav
和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>
这是一个演示。
为什么会发生这种情况?因为某些浏览器可能会将<nav>
和<a>
之间的空间解释为额外的文本节点。因此,firstChild
将不再工作,因为它将返回文本节点。
如果您有以下标记,它将工作:
<nav><a>afsa</a></nav>
您可以简单地document.querySelectorAll来选择列表。使用";firstElementChild";以获取第一个子节点并添加类。
const firstChild = document.querySelectorAll('nav').firstElementChild;
firstChild.classList.add('current');
语句:
document.getElementsByTagName('nav')[0].firstChild.className = "current"
有点脆弱,因为假定文档结构中的任何更改都会破坏代码。因此,更稳健的做法是:
var links,
navs = document.getElementsByTagName('nav');
if (navs) links = nav[0].getElementsByTagName('a');
if (links) links[0].className = links[0].className + ' ' + 'current';
您还应该具有健壮的addClassName和removeClassName函数。
Jquery可以让这变得非常容易:
$("#nav:first-child").addClass("current");
相关文章:
- 如何将活动类添加到第一个动态选项卡而不是角度的静态选项卡
- 在地图上添加第一个标记并进行地理编码
- (Js)数字方法在第一个数字后添加逗号并删除逗号后的2个数字??有没有
- 使用 JavaScript 向一组链接中的第一个链接添加一个属性
- 为什么第一个日期没有添加到数组中
- 可调整大小是添加第二个包装器,而不是更改第一个包装器的大小
- jQuery UI 可排序:无法将第一个元素添加到链接元素
- 如何检测第一个字符是否为回车符,并添加回车符
- 添加多个分部视图,第一个缺少表单
- 遍历两个列表,从第一个列表中获取值,将它们添加到第二个列表中
- 从段落元素中切片第一个字符,替换内容并添加类
- 添加新的第一个参数,然后应用原始参数
- jQuery Append 在 HTML 的第一个块上工作正常,但在动态添加的 HTML 上不起作用
- 将活动状态添加到jCarousel Lite中的第一个项目
- Jquery每个只添加第一个元素
- 如何在按下键时获得第一个选择(防止显示“添加书签”对话框)
- 如何在javascript中字符串的第一个字符之前添加数字
- 只有第一个复选框值被添加到我的表中
- 在AngularJS中添加第二个过滤器,而第一个过滤器没有中断
- 删除第一个字符并添加值