Dojo 假设我有许多div,单击每个div都会触发一个事件

Dojo 假设我有许多div,单击每个div都会触发一个事件,dojo,Dojo,Dojo 1.7 假设我有许多div,单击每个div都会触发一个事件。因此,当我单击一个div时,dojo会添加一个类,比如说“clicked”到该div。但是当我单击另一个div时,如何设置它,它会删除前面的div类“clicked”,并将其提供给我刚才单击的div? 这是因为,如果我单击一个div,它应该更改其背景并从先前单击的div中删除背景 谢谢 您应该使用dojo.query启用所需DOM元素的挂钩,使用dojo.on处理单击事件,并使用dojo/DOM class分配/取消分配类。为

Dojo 1.7 假设我有许多div,单击每个div都会触发一个事件。因此,当我单击一个div时,dojo会添加一个类,比如说“clicked”到该div。但是当我单击另一个div时,如何设置它,它会删除前面的div类“clicked”,并将其提供给我刚才单击的div? 这是因为,如果我单击一个div,它应该更改其背景并从先前单击的div中删除背景
谢谢

您应该使用
dojo.query
启用所需DOM元素的挂钩,使用
dojo.on
处理单击事件,并使用
dojo/DOM class
分配/取消分配类。为
div
元素提供一个共享类,以表示它们是此可单击单元的一部分,然后侦听所有元素上的单击事件,并根据需要分配类。使用Dojo 1.7.4查看以下内容:

HTML

<div class="mutable"></div>
<div class="mutable"></div>
<div class="mutable"></div>
CSS

.mutable {
    background-color:red;
}

.clicked {
    background-color:green;
}

div {
    border:2px solid black;
    margin:5px;

}

这也适用于Dojo 1.8.x和1.9.x。

在将
单击的
类应用于新单击的元素之前,可以从组中的所有元素中删除
单击的

使用Dojo 1.7:

require([
    'dojo/query',
    'dojo/dom-class',
    'dojo/on',
    'dojo/dom',
    'dojo/domReady!'
], function(query, dom_class, on, dom) {
    var boxes = query('.box', dom.byId('#container')); // get elements inside #container
    boxes.forEach(function(box) {
        on(box, 'click', function() {
            boxes.forEach(function(b) {
               dom_class.remove(b, 'clicked'); 
            });
            dom_class.add(box, 'clicked');
        });
    });
});


您还可以跟踪上次单击的元素,并从中删除
clicked
类。您可以在小提琴中看到这两个示例。

例如,您可以将所有这些div放在一个容器中

<div class='RadioDivContainer'>

  <div> </div>
  ....
  <div>  </div>

<div>

这只是演示如何实现它的想法。您可以更改它以适应您的情况。

您应该发布您迄今为止尝试过的内容。包含一些代码以及将其放在JSFIDLE上供人们使用,这样的问题确实会从中受益。它使你更容易得到帮助,了解你想要什么。包括HTML、相关样式和到目前为止的JS。您可以缓存
查询
结果,这样您就不会在每次单击时获得两次DOM元素。当然,如果动态添加元素,则必须重新运行查询,但这很容易实现。如果没有数以百万计的DOM元素需要解析,这仍然是一种相对便宜且可维护的方法,尽管缓存没有什么问题。:)
<div class='RadioDivContainer'>

  <div> </div>
  ....
  <div>  </div>

<div>
dojo.query(".RadioDivContainer .clicked").forEach(function(node){
     dojo.removeClass(node, "clicked");
}); 

dojo.addClass(evt.target, "clicked");