javascript:在子元素的条件下将类应用于父标记元素
javascript : applying class to parent tag element on a condition of child element
如果你能帮我回答,我将不胜感激。请只使用JavaScript回答,但不要使用jQuery。
HTML代码:
<li><a class="menu" href="#">Personnel</a>
<ul>
<li><a href="about.html">About</a></li>
<li><a href="blog.html">Blog</a></li>
</ul>
</li>
<li><a class="menu" href="#">Experience</a>
<ul>
<li><a href="http://stackoverflow.com/">Stack</a></li>
<li><a href="http://odesk.com/">Odesk</a></li>
</ul>
</li>
JavaScript任务:
var url=window.location.href;
如果我的浏览器现在在"about.html"页面。所以url="about.html"。那时我想把锚标签"人员"的类"菜单"改为类"活动"。
否则,如果我的浏览器现在处于"help.html"页面。所以url="help.html"。那时我想把锚标签"Experience"的class"menu"改为class"active"。
相关html:
<a class="menu" id="personnel" href="#">Personnel</a>
<a class="menu" id="experience" href="#">Experience</a>
相关js:
if(url.indexOf('about.html')!==-1)
var elem = document.querySelector('#personnel');
else if (url.indexOf('help.html')!==-1)
var elem = document.querySelector('#experience');
elem.className='active';
编辑
如果HTML不能(静态)更改,则
var elems = document.querySelectorAll('.menu'),
elem,
desiredElemContents;
if(url.indexOf('about.html')!==-1) desiredElemContents = 'Personnel';
else if (url.indexOf('help.html')!==-1) desiredElemContents = 'Experience';
for(var i=elems.length-1; i>=0; i--) {
var elemContents = elems[i].textContent || elems[i].innerText;
if(elemContents!==desiredElemContents) continue;
elem = elems[i];
break;
};
if (elem) elem.className='active';
else console.error("No element found with content "+desiredElemContents);
请注意,在删除"menu"类时,每次页面加载只能运行一次。
希望这对您有所帮助。
Html
<menu id="nav">
<ul>
<li><a href="active1.html">Home</a></li>
<li><a href="active2.html">Contact</a></li>
<li><a href="active3.html">About</a></li>
<li><a href="active4.html">Portfolio</a></li>
</ul>
</menu>
CSS
#nav {
margin:200px auto;
width:430px;
}
#nav ul {
list-style:none;
background-color:#64abfb;
}
#nav ul li {
display:inline-block;
line-height:44px;
}
#nav ul li a {
margin:10px;
color:#FFF;
padding:4px;
font-size:20px;
text-decoration:none;
}
#nav ul li a:hover {
border-bottom:3px #FFF solid;
}
#nav ul li .active {
border-bottom:3px #FFF solid;
}
jQuery/javascript
$(function() {
var pgurl = window.location.href.substr(window.location.href
.lastIndexOf("/")+1);
$("#nav ul li a").each(function(){
if($(this).attr("href") == pgurl || $(this).attr("href") == '' )
$(this).addClass("active");
})
});
相关文章:
- 将自定义javascript函数应用于iframe元素
- CSS: jQuery:将右边距应用于 li 元素,除了每个第 4 个子元素(仅适用于 display:block 的元
- jQuery将“x”号图像元素应用于SRC和类
- 将 css 样式应用于 javascript 调用中的 :after 伪元素
- 如何将CSS应用于Javascript添加的元素
- 您能否通过JavaScript将媒体查询特定样式应用于HTML元素
- 可以/应该将多个自定义指令应用于Angular中的同一元素
- 聚合物:将动画应用于dom重复模板中的dom元素
- 将点击/悬停函数应用于JS中的多个元素类
- 将jQuery应用于ajax加载的HTML元素
- 当将.click()应用于li元素时,应该使用什么选择器
- 将jquery插件应用于dom元素
- 将显示功能应用于ajax成功创建的元素
- 如何将工具提示应用于d3嵌套层(流图)中的元素
- 将焦点样式事件应用于UL标记元素
- 将jQuery动画应用于Angular JS在加载时动态加载的视图中的元素
- 有没有一种更优雅的方法将 css 应用于“除了这个元素之外的所有元素”
- 如何用.not改变选择器来应用于dom元素
- 全局样式未应用于Chrome 36中Polymer元素中的Shadow DOM子项
- 将数据元素应用于“数据表”单元格