gpt4 book ai didi

javascript - jQuery 通过两个选择输入按数据属性过滤

转载 作者:行者123 更新时间:2023-11-29 18:15:14 25 4
gpt4 key购买 nike

我无法通过两个不同的输入使用 jQuery 过滤生成的 div。用户可以决定按办公室专业办公室和专业进行过滤。过滤是根据与选择的输入值相对应的 div 上的数据属性设置的。

<div>
<label for="officeSearch">Search by office:</label>
<select name="Office Search" id="officeSearch">
<option value="all"></option>
<option value="communication">Communication</option>
<option value="internal medicine">Internal Medicine</option>
</select>
</div>
<div>
<label for="specialtySearch">Search by specialty:</label>
<select name="Specialty Search" id="specialtySearch">
<option value="all"></option>
<option value="Bone Cancer">Bone Cancer</option>
<option value="Breast Cancer">Breast Cancer</option>
<option value="Oral Cancer">Oral Cancer</option>
</select>
</div>

<div class="module-sm profile" data-office="communication" data-specialty="Oral Cancer">
<p>Person A</p>
</div>
<div class="module-sm profile" data-office="communication" data-specialty="Breast Cancer">
<p>Person B</p>
</div>
<div class="module-sm profile" data-office="internal medicine" data-specialty="Bone Cancer">
<p>Person C</p>
</div>

这是我正在使用的 jQuery,它会在选择发生变化时触发:

$(document).ready(function() {
$("#officeSearch").on('change', function(){
var selectedOffice = $('#officeSearch').val();
var selectedSpecialty = $('#specialtySearch').val();
var person = $('#filterList .profile').not('.out');
var allPersons = $('#filterList .profile');
var allPersonsOffice = $('#filterList .profile').data('office');
var allPersonsOut = $('#filterList .profile.out');

var office = $('.profile[data-office="' + selectedOffice +'"]');

alert(''+ selectedOffice + ' ' + selectedSpecialty +'');

if (selectedOffice == 'all' && selectedSpecialty == 'all'){
$(allPersons).removeClass('out').fadeIn(500);
}
else {
$(person).not(office).addClass('out').fadeOut(500);
office.removeClass('out').fadeIn(500);
}
});
$("#specialtySearch").on('change', function(){
var selectedOffice = $('#officeSearch').val();
var selectedSpecialty = $('#specialtySearch').val();
var person = $('#filterList .profile').not('.out');
var allPersons = $('#filterList .profile');
var allPersonsOffice = $('#filterList .profile').data('office');
var allPersonsOut = $('#filterList .profile.out');

var specialty = $('.profile[data-specialty="' + selectedSpecialty +'"]');

alert(''+ selectedOffice + ' ' + selectedSpecialty +'');

if (selectedOffice == 'all' && selectedSpecialty == 'all'){
$(allPersons).removeClass('out').fadeIn(500);
}
else {
$(person).not(specialty).addClass('out').fadeOut(500);
specialty.removeClass('out').fadeIn(500);
}
});
});

如果有帮助,我做了一个 codepen以展示我正在尝试做的事情以及我目前所处的位置。

我已经进行了一些搜索,数周以来一直在绞尽脑汁思考如何让它发挥作用。非常感谢任何使此代码更简洁的帮助或其他人如何解决此问题的示例!

最佳答案

  1. 从任一选择更改中调用单个更新。
  2. 根据选择(附加)创建过滤器。
  3. 隐藏不在比赛中的那些
  4. 显示匹配项。

JSFiddle:http://jsfiddle.net/TrueBlueAussie/2u7NY/

$(document).ready(function () {
var onChange = function () {

var selectedOffice = $('#officeSearch').val();
var selectedSpecialty = $('#specialtySearch').val();
var filter = "#filterList .profile";
var allPersons = $(filter);
if (selectedOffice != "all")
{
filter += '[data-office="' + selectedOffice + '"]'
}
if (selectedSpecialty != "all")
{
filter += '[data-specialty="' + selectedSpecialty + '"]'
}
var $matching = allPersons.filter(filter);
$(allPersons).not($matching).removeClass('out').fadeOut(500);
$matching.removeClass('out').fadeIn(500);
}

$("#officeSearch, #specialtySearch").on('change', onChange );
});

更新:http://jsfiddle.net/TrueBlueAussie/2u7NY/2/

过滤器可以稍微高效一些,因为不需要“#filterList .profile”来根据属性过滤 allPersons

我还删除了函数变量并将函数内联放置在更改事件上。

$(document).ready(function () {
$("#officeSearch, #specialtySearch").on('change',
function () {
var selectedOffice = $('#officeSearch').val();
var selectedSpecialty = $('#specialtySearch').val();
var allPersons = $("#filterList .profile");
var filter = "";
if (selectedOffice != "all") {
filter = '[data-office="' + selectedOffice + '"]'
}
if (selectedSpecialty != "all") {
filter += '[data-specialty="' + selectedSpecialty + '"]'
}
var $matching = allPersons.filter(filter);
$(allPersons).not($matching).removeClass('out').fadeOut(500);
$matching.removeClass('out').fadeIn(500);
});
});

关于javascript - jQuery 通过两个选择输入按数据属性过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23832258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com