我正在尝试创建一种过滤器。
当用户点击某个按钮时,它会获取该按钮的ID,并将display:none;
应用于与所提供的data
属性不匹配的所有元素。
HTML:
<div class="job-list">
<div class="row">
<div class="grid half">
<div class="job-item" data-job-type="fulltime">
<h3>Marketing & Communications Manager</h3>
<h4>Central London - salary competitive</h4>
</div>
</div>
<div class="grid half">
<div class="job-item" data-job-type="parttime">
<h3>Senior PR & Media Manager</h3>
<h4>Central London - salary dependent on experience</h4>
</div>
</div>
</div>
当用户点击某个按钮时,var selection
设置为parttime
或fulltime
var selection = 'fulltime';
然后我尝试匹配页面上的元素:
a).job-list
b)有data-job-type="[the selection var set above]"
$('.job-list div[data-job-type!="'+selection+'"]').css('display','none');
然而,我发现它会选择整个.job-list
并将display:none;
应用于那个,而不是匹配的子元素?
答案 0 :(得分:3)
选择要么 具有指定属性,要么具有指定属性但没有特定值的元素。
你的选择器过于激进。它正在选择所有div,即使它们没有属性,因为它们满足条件[data-job-type!="'+selection+'"]
。向选择器添加额外的[data-job-type]
,以仅定位具有该属性的div
$(document).ready(function() {
$('.button').click(function() {
var selection = 'fulltime';
$('.job-list div[data-job-type][data-job-type!="' + selection + '"]').closest('.grid').hide();
});
});
&#13;
.job-item {
width: 500px;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div class="button">Click me!</div>
<div class="job-list">
<div class="row">
<div class="grid half">
<div class="job-item" data-job-type="fulltime">
<h3>Marketing & Communications Manager</h3>
<h4>Central London - salary competitive</h4>
</div>
</div>
<div class="grid half">
<div class="job-item" data-job-type="parttime">
<h3>Senior PR & Media Manager</h3>
<h4>Central London - salary dependent on experience</h4>
</div>
</div>
</div>
</div>
&#13;
一些旁注。
hide()
可用于代替css('display', 'none')
hide()
整个子容器,在本例中为grid