根据主体id将类添加到元素中
Add class to element based on body id
我正在尝试根据主体的id向特定列表元素添加一个类,但不确定如何添加。
到目前为止,我拥有的是:
document.addEventListener("DOMContentLoaded", function() {
var navbar = "<div class='nav'><ul class='nav'>{{#each links}}<li><a href='#{{link}}'>{{name}}</a></li>{{/each}}</ul></div>"
template_nav = Handlebars.compile(navbar);
var navlinks = [{link:"home", name:"Home"},{link:"about", name:"About Us"}, {link:"contact", name:"Contact Us"}];
document.querySelector("#nav").innerHTML = template_nav({links: navlinks});
var bodyId = document.body.id;
});
我想做的是,如果主体id是例如"contact
",我希望包含"#contact
"链接的列表元素具有类"active
"。
我真的不能只搜索所有的"a
"标签,因为可能有更多的a元素具有相同的链接,我只需要将类添加到"nav
"div
中的链接中,但我不确定如何做到这一点。
任何相关文档的帮助或链接都将不胜感激
这可能会为您指明正确的方向。
首先,将导航栏HTML更改为具有类参数
var navbar = "
<div class='nav'>
<ul class='nav'>
{{#each links}}
<li class={{className}}>
^^^^^^^^^^^^^
<a href='#{{link}}'>{{name}}</a>
</li>
{{/each}}
</ul>
</div>";
然后更改你的导航链路阵列,以执行相同的
var navlinks = [
{className: '', link: 'home', name: 'Home'},
^^^^^^^^^^^^^
{className: '', link: 'about', name: 'About Us'},
^^^^^^^^^^^^^
{className: '', link: 'contact', name: 'Contact Us'}
^^^^^^^^^^^^^
];
然后
if (bodyId === 'contact') {
var i = 0;
for (i; i < navlinks.length; i += 1) {
if (navlinks[i].link === 'contact') {
navlinks[i].className = 'active';
}
}
}
这里有一个fiddle演示了如何使用Mustache的{{#if}}
指令,再加上简单地枚举链接并将其与正文的id进行比较来实现这一点。
编辑
代码:
var navbar = '<div class="nav">' +
'<ul class="nav">' +
'{{#each links}}' +
'<li>' +
'<a href="#{{link}}" {{#if active}}class="active"{{/if}}>{{name}}</a>' +
'</li>' +
'{{/each}}' +
'</ul>' +
'</div>';
var template_nav = Handlebars.compile(navbar);
var navlinks = [
{link:"home", name:"Home"},
{link:"about", name:"About Us"},
{link:"contact", name:"Contact Us"}
];
var bodyId = document.body.id;
findActiveLink(navlinks, bodyId).active = true;
document.querySelector("#nav").innerHTML = template_nav({links: navlinks});
function findActiveLink(navlinks, identifier) {
var active = {};
var i;
for (var i = 0, l = navlinks.length; i < l; i++) {
if (navlinks[i].link === identifier) {
active = navlinks[i];
break;
}
}
return active;
}
相关文章:
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 如何使用jquery遍历具有动态添加元素的数组
- jQuery appendTo 替换元素而不是添加元素,如果正在添加的元素预先存在于列表中
- 如何使用jquery添加元素
- 动态添加元素上的 HammerJS
- CSS没有'使用javascript向页面动态添加元素时无法工作
- 使用Javascript在DOM元素中添加元素
- 在添加元素时激发JS事件
- 什么's是在IE8+中添加元素的最有效方法
- d3.js在添加元素时协调
- 使用路由器链接动态添加元素
- 动态添加元素
- 在页面内容完全加载后,使用jQuery在DOM中添加元素
- j查询绑定单击不添加元素
- 在循环 jQuery 上添加元素
- 从一个页面调用 javascript 函数以在第二个页面上添加元素
- 页面加载后向<正文>添加元素时出现问题
- 动态添加元素时刷新 HTML
- 动态添加元素时不触发 JQuery 事件
- 如何使用 JavaScript 获取动态添加元素的宽度