Reputation: 1231
I have unsorted list in html. Some li
's have a class="checked"
.
If the li
element have the class='checked'
it should hide me the span inside the li
element.
My example:
$('ul li').each(function(){
if($(this).attr('class') == 'checked'){
$('li span').hide();
}
});
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
But my code is hidding every list element. Why is that so ?
Upvotes: 1
Views: 58
Reputation: 115222
In your code $('li span')
would select all elements instead select span within the current element.
$('span', this).hide();
// or
$(this).find('span').hide();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
<script>
$('ul li').each(function(){
if($(this).attr('class') == 'checked'){
$('span',this).hide();
}
});
</script>
Also, it's better to use hasClass()
method to check element has a certain class since the element may have multiple class.
$('ul li').each(function(){
if($(this).hasClass('checked')){
$('span', this).hide();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
<script>
$('ul li').each(function() {
if ($(this).hasClass('checked')) {
$('span', this).hide();
}
});
</script>
There is no necessary for the each()
method in your code, you can reduce into a single line by updating selector with the class.
$('ul li.checked span').hide();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
<script>
$('ul li.checked span').hide();
</script>
Upvotes: 0
Reputation: 59
$('li.checked span').hide();
You can use above code , each function is not needed for this function
Upvotes: 0
Reputation: 1258
you are hiding all spans with your selector. Find span in the current element you interact with
$('ul li').each(function(){
if($(this).hasClass('checked')){
$(this).find('span').hide();
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
Edit: due to Mohammad comment I suggest to check it the element has a checked class, not check the whole class attribue
Upvotes: 0
Reputation: 22323
Use $(this)
$('ul li').each(function(){
if($(this).attr('class') == 'checked'){
$(this).find('span').hide(); // If want to hide only span
//$(this).hide(); // if want to hide li
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
Upvotes: 1
Reputation: 859
It would be more effective to do that this way:
$('ul li.checked span').hide();
Also, consider using plain CSS:
ul li.checked span {
display: none;
}
Upvotes: 1
Reputation: 15555
$('ul li.checked span').hide()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="checked" id="item-1"><span class='priorityValue'>1</span></li>
<li class="checked" id="item-2"><span class='priorityValue'>2</span></li>
<li id="item-3"><span class='priorityValue'>3</span></li>
<li id="item-4"><span class='priorityValue'>4</span></li>
</ul>
Upvotes: 0