简体   繁体   English

为什么不能从div onclick添加和删除类?

[英]Why do adding and removing a class from a div onclick not working?

I'm trying to do this: clicking a > to show a list and a V , click again to close the list and change V back to > . 我正在尝试执行此操作:单击>显示列表和V ,再次单击以关闭列表并将V更改回> Here is my code 这是我的代码

 function toggle() { var toggleClosed = $(this).find(".toggle-closed"); var toggleOpened = $(this).find(".toggle-opened"); if (!$(toggleClosed).is(":visible")) { toggleClosed.removeClass('toggle-opened').addClass('toggle-closed'); toggleOpened.removeClass('toggle-closed').addClass('toggle-opened'); } else { $(toggleClosed).addClass('toggle-closed').removeClass('toggle-opened'); $(toggleOpened).addClass('toggle-opened').removeClass('toggle-closed'); } } 
 .form-row-filter { background-color: grey; } .toggle-opened { cursor: pointer; display: block; } .toggle-closed { cursor: pointer; display: none; } .material-icons { margin-right: -4px; margin-left: 4px; vertical-align: middle; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <div class="material-icons toggle-opened" onclick="toggle()">&gt;</div> <div class="material-icons toggle-closed" onclick="toggle()">V</div> <li class="toggle-closed"> company a </li> <li class="toggle-closed"> company b </li> </ul> </div> 

Here is a codepen: 这是一个codepen:

https://codepen.io/thinkvantagedu/pen/MNORvZ?editors=1100 https://codepen.io/thinkvantagedu/pen/MNORvZ?editors=1100

Why wouldn't the class being added or removed? 为什么不添加或删除该类?

Here is your code fixed: https://codepen.io/anon/pen/BXmgdo 这是您的固定代码: https : //codepen.io/anon/pen/BXmgdo

The mistakes were in the JS: 错误在JS中:

function toggle () {

  var toggleClosed = $('.toggle-closed');
  var toggleOpened = $('.toggle-opened');

  toggleClosed.removeClass('toggle-closed').addClass('toggle-opened');
  toggleOpened.removeClass('toggle-opened').addClass('toggle-closed');
}

I would probably only use jQuery's toggleClass in this situation. 在这种情况下,我可能只会使用jQuery的toggleClass

As simple as: 简单如:

$(".toggle-element").toggleClass("toggle-closed").toggleClass("toggle-opened");

You can use it for managing arrows too. 您也可以使用它来管理箭头。 So, this is how I would do your toggle method: 因此,这就是我要做的toggle方法:

function toggle () {
    $(".toggle-element").toggleClass("toggle-closed").toggleClass("toggle-opened");
    $(".toggle-trigger").toggleClass("closed");
}

Where .toggle-trigger class could contain different arrows based on .closed class. 其中.toggle-trigger类可以包含基于.closed类的不同箭头。 You can even remove one of those classes completely. 您甚至可以完全删除这些类之一。

$(".toggle-element").toggleClass("toggle-closed");

This would work just fine. 这样就可以了。

Here's an example: https://codepen.io/anon/pen/JgOQax?editors=1100 这是一个例子: https : //codepen.io/anon/pen/JgOQax?editors=1100

And the code: 和代码:

  function toggle () { $(".toggle-element").toggleClass("toggle-closed"); $(".toggle-trigger").toggleClass("closed"); } 
 .form-row-filter { background-color: grey; } .toggle-closed { cursor: pointer; display: none; } .material-icons { margin-right: -4px; margin-left: 4px; vertical-align: middle; } .toggle-trigger::after{ content: "v"; } .toggle-trigger.closed::after{ content: ">"; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <span class="material-icons toggle-trigger closed" onclick="toggle()"></span> <li class="toggle-element toggle-closed"> company a </li> <li class="toggle-element toggle-closed"> company b </li> </ul> </div> 

Aside from Rory's valid point about your HTML markup, the following should work. 除了关于您的HTML标记的Rory的有效观点之外,还应该执行以下操作。 You'll want to replace all instances of toggleme with a name that is relevant to your elements, and unique from anything else in the document. 您将toggleme与您的元素相关的名称替换toggleme所有实例,并且该名称对于文档中的其他任何内容都是唯一的。

 $(".toggleme").click(function(){ $(".toggleme").toggleClass("toggle-closed"); $(".toggleme").toggleClass("toggle-opened"); }) 
 .toggle-opened { display: block; } .toggle-closed { display: none; } 
 <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <div class="form-row-filter" style="display:inline-block"> <ul> <div class="material-icons toggle-opened toggleme">&gt;</div> <div class="material-icons toggle-closed toggleme">V</div> <li class="toggle-closed toggleme"> company a </li> <li class="toggle-closed toggleme"> company b </li> </ul> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM