Javascript 不是(下一个)-可能吗?
HTML示例:Javascript 不是(下一个)-可能吗?,javascript,jquery,Javascript,Jquery,HTML示例: <div class=blah> <div class=moreCats></div> </div> <div class=subCats>.......</div> <div class=blah> <div class=moreCats></div> </div> <div class=subCats>.......</d
<div class=blah>
<div class=moreCats></div>
</div>
<div class=subCats>.......</div>
<div class=blah>
<div class=moreCats></div>
</div>
<div class=subCats>.......</div>
<div class=blah>
<div class=moreCats></div>
</div>
<div class=subCats>.......</div>
这是我正在尝试的完整JQuery
// show children cat items
$('#sideNav').on("click", ".moreCats", function() {
$('div.subCats').not($(this).next('.subCats')).slideUp(); // close all except next
$(this).next('.subCats').slideToggle(); // slideToggle next
});
您可以通过将当前目标(将返回该元素)的滑块切换放置在
中来组合它们。而不是,您还需要选择父对象的下一个
$('#sideNav').on("click", ".moreCats", function() {
$('div.subCats').not($(this).parent().next('.subCats').slideToggle()).slideUp();
//or do $(this).closest('.blah').next('.subCats');
});
如果要拆分它们,最好缓存下一个,而不是再次选择它
$('#sideNav').on("click", ".moreCats", function() {
var $target = $(this).parent().next('.subCats');
$('div.subCats').not($target.slideToggle()).slideUp();
//or just do as below
//$('div.subCats').not($target).slideUp();
//$target.slideToggle()
});
您所拥有的是有效的,但它没有达到您期望的效果,.next()
选择下一个直接同级元素,您应该首先选择父元素:
$('div.subCats').not($(this.parentNode).next('.subCats')).slideUp();
您还可以使用.index()
方法:
$('#sideNav').on({
click: function() {
var $sub = $('div.subCats'),
i = $('#sideNav .moreCats').index(this);
$sub.not( $sub.eq(i).slideToggle() ).slideUp();
}
}, ".moreCats");
.moreCats
没有任何兄弟姐妹,因此您不能使用.next()
。你真正需要的是得到这个
的父母的下一个兄弟姐妹。所以您从$(this)
.parent()
.next('.subCats')
请参见此示例。next
获取紧邻的下一个元素,并与选择器匹配。这真的是你需要的吗?为什么你不用一个类来注释你要修改的类,然后把修改应用到没有这个类的所有东西上呢。可能有点类似于您所做的,但如果该类对状态进行simbolized,那么它的可读性可能会更好。
$('#sideNav').on({
click: function() {
var $sub = $('div.subCats'),
i = $('#sideNav .moreCats').index(this);
$sub.not( $sub.eq(i).slideToggle() ).slideUp();
}
}, ".moreCats");
$('body').on("click", ".moreCats", function() {
console.log($(this).parent().next('.subCats'));
$('div.subCats').not($(this).parent().next('.subCats')).slideUp(); // close all except next
$(this).parent().next('.subCats').slideToggle(); // slideToggle next
});