页面上有许多div
个元素。
我有一个嵌套的div
。
我希望能够将一个类添加到click
ed元素,并.show()
添加一个子div。
$('.container').on('click', function(){
$(this).toggleClass('red').children('.insideItem').slideToggle();
});
所以,现在我需要一些方法来removeClass()
和slideUp()
其他所有,如果点击除了open div 。当然,我尝试过这样的事情:
$('html').on('click', function(){
$('.container').removeClass('red').children('div').slideUp();
});
嗯,这只会阻止效果停留在第一位。我已经阅读了event.Propagation()
,但我已经读过,如果可能的话应该避免。
我正在努力避免使用像accordion
这样的任何预先构建的插件,因为这应该是一个非常简单的事情,我想知道一种简单的方法来使它工作。
有人能够在这个小提琴上展示一个快速的例子来解决这个问题吗?
答案 0 :(得分:1)
一种方法是使用以下代码更新代码:
1)防止方块上的点击冒泡到父元素 2)确保在任何地方进行新的点击时重置所有方块的状态。
$('.container').on('click', function(){
$this = $(this);
$('.container').not($this).removeClass('red').children('div').slideUp();
$this.toggleClass('red').children('div').slideToggle();
return false;
});
请在此处查看更新后的JSfiddle:https://jsfiddle.net/pdL0y0xz/
答案 1 :(得分:1)
您需要结合两种方法:
for (var i = 0; i < 10; i++) {
$('#wrap').append("<div class='container'>" + i + "<div class='insideDiv'>Inside Stuff</div></div>");
}
$('.container').on('click', function() {
var hadClassRed = $(this).hasClass('red');
$('.container').removeClass('red').children('div').slideUp();
if (!hadClassRed) {
$(this).toggleClass('red').children('div').slideToggle();
}
});
.container {
width: 200px;
height: 200px;
float: left;
background: gray;
margin: 1em;
}
.insideDiv {
display: none;
}
.red {
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrap"></div>