通过点击另一个元素将类切换为元素

我想单击一个元素来切换一个完全不相关的元素(不是孩子,父母或兄弟姐妹)上引用的类,

例如,最初的代码看起来像这样

<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

上一篇: Toggle class to an element by click another element

下一篇: Toggle instead of going to page with URL