JavaScript
x
20
20
1
<li class="cate-item">
2
<button class="cate-label" >item 1 </button>
3
<ul class="sub-categ">
4
<li> sub item 1</li>
5
<li> sub item 2</li>
6
<li> sub item 3</li>
7
<li> sub item 4</li>
8
</ul>
9
</li>
10
11
<li class="cate-item">
12
<button class="cate-label" >item 2 </button>
13
<ul class="sub-categ">
14
<li> sub item 1</li>
15
<li> sub item 2</li>
16
<li> sub item 3</li>
17
<li> sub item 4</li>
18
</ul>
19
</li>
20
This li item is generated dynamically I want to toggle li on the cate-label button click. for that, I did the following code
JavaScript
1
12
12
1
$(document).on("click", "#categoryList > li .cate-label", function () {
2
var currentItem = $(this).closest("li");
3
ItemToHide = $("#categoryList > li").not(currentItem);
4
ItemToHide.removeClass("active-item");
5
ItemToHide.find(".sub-cate").hide();
6
currentItem.toggleClass("active-item");
7
8
9
}
10
11
);
12
when I try to hide item using ItemToHide.find(“.sub-cate”).hide(); it didn’t hide anything . I tried to find the length of the item using ItemToHide.find(“.sub-cate”).length but it returned 0.
Advertisement
Answer
Lower your event handling to something closer. I wrapped everything in a <menu>
tag and registered the click event to it instead of document
. It doesn’t make much of a difference performance wise but I suggest it because it’s looks as if your perspective is skewed if dealing with a larger view of the DOM and you’ll be error prone:
JavaScript
1
6
1
var currentItem = $(this).closest("li");
2
ItemToHide = $("#categoryList > li").not(currentItem);
3
ItemToHide.removeClass("active-item");
4
ItemToHide.find(".sub-cate").hide();
5
currentItem.toggleClass("active-item");
6
That nightmare is now:
JavaScript
1
2
1
$(this).next('.sub-categ').toggle('ease-out');
2
JavaScript
1
5
1
$('menu').on("click", ".cate-label", toggleList);
2
3
function toggleList(e) {
4
$(this).next('.sub-categ').toggle('ease-out');
5
};
JavaScript
1
23
23
1
<menu>
2
<li class="cate-item">
3
<button class="cate-label">item 1 </button>
4
<ul class="sub-categ">
5
<li> sub item 1</li>
6
<li> sub item 2</li>
7
<li> sub item 3</li>
8
<li> sub item 4</li>
9
</ul>
10
</li>
11
12
<li class="cate-item">
13
<button class="cate-label">item 2 </button>
14
<ul class="sub-categ">
15
<li> sub item 1</li>
16
<li> sub item 2</li>
17
<li> sub item 3</li>
18
<li> sub item 4</li>
19
</ul>
20
</li>
21
</menu>
22
23
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>