如果点击该行内的(嵌套)复选框,则突出显示(通过添加background-color
)“行”<li>
。
在此功能中,我正在处理文件管理系统的界面。当用户单击该复选框时,他们可以删除所有已检查的文件。为了给他们视觉反馈,我希望他们所有选择的文件都有背景颜色。这将通过单击复选框完成,然后我希望<li>
变为彩色。
我在stackoverflow上找到了各种有用的答案,但是在知识方面存在差距并试图填补它。大多数答案使用父元素。但这只能帮助我着色那个拥有复选框的特定父母。
我在codepen
上有这个演示$("#this-list :checkbox").on('click', function(){
$(this).parent().toggleClass("checked");
});
.checked {
background: red;
}
<div class="container">
<ul id="this-list">
<li>
<div class="row">
<div class="col-md-2">
<input type="checkbox" />
song.mp3
</div>
<div class="col-md-2">
2011
</div>
<div class="col-md-2">
1 gb
</div>
<div class="col-md-2">
2 min
</div>
</div>
</li>
<!-- More <li>s -->
</ul>
</div>
答案 0 :(得分:12)
您可以使用closest
获取最接近的复选框li
元素:
$("#this-list :checkbox").on('click', function(){
$(this).closest('li').toggleClass("checked");
});
此方法将从复选框开始冒泡DOM,直到找到给定选择器的匹配项(在这种情况下为li
)。
答案 1 :(得分:7)
使用.parents([selector])
对于你想要的li
$(this).parents('li').toggleClass("checked");
或者如果您只想突出显示行
$(this).parents('.row').toggleClass("checked");
或者,如果您只想突出显示单元格
$(this).parents('.col-md-2').toggleClass("checked");
答案 2 :(得分:5)
你非常接近!您可以使用jQuery的.parents()方法并传入类.row。它看起来像这样:
TempRepo
编辑:
正如@showdev所提到的,如果你想要li元素,你可以这样做:
TempRepo
答案 3 :(得分:2)
与此Codepen
一样$("#this-list :checkbox").on('click', function(){
$(this).closest("li").toggleClass("checked");
});
或者,由于复选框包含在目标div
内的li
内,您可以使用:Codepen
$("#this-list :checkbox").on('click', function(){
$(this).parent().parent().toggleClass("checked");
});
答案 4 :(得分:2)
只需添加另一个.parent()
即可将checked
类添加到该行(父级的父级)中:
$(this).parent().parent().toggleClass("checked");
请参阅此CodePen fork。