我在html中有未排序的列表。有些li
有一个class="checked"
。
如果li
元素包含class='checked'
,则应该隐藏li
元素内的范围。
我的例子:
$('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>
但是我的代码隐藏了每个列表元素。为什么会这样?
答案 0 :(得分:1)
这样做会更有效:
$('ul li.checked span').hide();
另外,请考虑使用纯CSS:
ul li.checked span {
display: none;
}
答案 1 :(得分:1)
使用$(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
}
});
&#13;
<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>
&#13;
答案 2 :(得分:0)
在您的代码中$('li span')
将选择所有元素,而不是在当前元素中选择span。
$('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>
&#13;
此外,使用hasClass()
方法检查元素是否具有某个类更好,因为该元素可能有多个类。
$('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>
&#13;
您的代码中没有必要使用each()
方法,您可以通过使用类更新选择器来缩减为单行。
$('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>
&#13;
答案 3 :(得分:0)
$('ul li.checked span').hide()
&#13;
<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>
&#13;
答案 4 :(得分:0)
您正在使用选择器隐藏所有范围。在与您交互的当前元素中查找范围
$('ul li').each(function(){
if($(this).hasClass('checked')){
$(this).find('span').hide();
}
});
&#13;
<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>
&#13;
编辑:由于Mohammad的评论,我建议检查一下该元素是否有一个已检查的类,而不是检查整个类的属性
答案 5 :(得分:0)
$('li.checked span').hide();
您可以使用上述代码,此功能不需要每个功能