通过点击另一个元素将类切换为元素
我想单击一个元素来切换一个完全不相关的元素(不是孩子,父母或兄弟姐妹)上引用的类,
例如,最初的代码看起来像这样
<a id="button">Button</a>
<div class="navigation">
Foo
</div>
当用户点击带有id button
的元素时,HTML会变成看起来像这样的类(在已经引用“导航”的元素上引用类“open”:
<a id="button">Button</a>
<div class="navigation open">
Foo
</div>
用户应该可以通过点击带有ID button
的元素来切换类。
我想用纯javascript来达到这个效果。
您可以将click
事件附加到带有ID button
然后单击使用getElementsByClassName()
选择带有类navigation
的元素(ti将返回节点列表),然后使用[0]
选择第一个元素,然后使用toggle()
:
document.getElementById('button').onclick = function(){
document.getElementsByClassName('navigation')[0].classList.toggle("open");
}
希望这可以帮助。
document.getElementById('button').onclick = function(){
document.getElementsByClassName('navigation')[0].classList.toggle("open");
}
.open{
background-color: green;
color: white;
}
<a id="button">Button</a>
<div class="navigation">
Foo
</div>
您需要添加事件处理程序。 这可以通过简单地设置Element
对象上的onClick
属性来完成:
document.getElementById('button').onClick = function onClick() {
document.getElementsByClassName('navigation')[0].className += 'open';
};
但是,最好使用addEventListener
以便将多个事件侦听器添加到相同的元素中:
document.getElementById('button').addEventListener('click', function onClick() {
document.getElementsByClassName('navigation')[0].className += 'open';
}, false);
编辑:它也更好地缓存你的元素引用变量如下所示:
var button = document.getElementById('button');
var nav = document.getElementsByClassName('navigation')[0];
button.addEventListener('click', function onClick() {
nav.className += 'open';
}, false);
EDIT2:如在Zakaria的回答中,您可能想要使用classList.add(x)
而不是className += x
。 这更符合jQuery的工作方式。 但是,请注意,旧版本的IE不支持classList
。
编辑3:这是使用classList.toggle
的最终版本
var button = document.getElementById('button');
var nav = document.getElementsByClassName('navigation')[0];
button.addEventListener('click', function onClick() {
nav.classList.toggle('open');
}, false);
classList
使用className
代替classList
的快速替换:
function classList(elem) {
var cl = {
add: function (clas) {
elem.className += clas;
},
remove: function (clas) {
elem.className = elem.className.replace(clas, '');
},
toggle: function (clas) {
if (elem.className.indexOf(clas) > -1) {
cl.remove(clas);
} else {
cl.add(clas);
}
}
};
return cl;
}
// usage
classList(nav).add('open');
classList(nav).toggle('open');
尝试这个:
document.querySelector('div.navigation').classList.toggle('open');
如果你只有一个具有类导航的div元素,这将工作。 最好给它一个id,例如id = navigation
链接地址: http://www.djcxy.com/p/83971.html