Dojo 假设我有许多div,单击每个div都会触发一个事件
Dojo 1.7 假设我有许多div,单击每个div都会触发一个事件。因此,当我单击一个div时,dojo会添加一个类,比如说“clicked”到该div。但是当我单击另一个div时,如何设置它,它会删除前面的div类“clicked”,并将其提供给我刚才单击的div? 这是因为,如果我单击一个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.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");