gpt4 book ai didi

javascript - 尝试链接过滤器选项选择

转载 作者:行者123 更新时间:2023-11-30 06:22:57 25 4
gpt4 key购买 nike

我想链接我的两个过滤器,为我的谷歌地图过滤器获取一个特定的过滤器,如果按类别的过滤器标记有值,我希望我的过滤器按 session 从按类别的过滤器中获取值,然后结合我的 session 过滤器。

这是我的代码,按类别和 session 过滤:

 // filter markers by category
filterMarkers = function (category) {
for (i = 0; i < gmarkers1.length; i++) {
marker = gmarkers1[i];
// If is same category or category not picked
if (marker.category == category || category.length === 0) {
marker.setVisible(true);

}
// categories don't match
else {
marker.setVisible(false);
}
}
}

// filter markers by session
filterMarkersx = function (session) {
for (i = 0; i < gmarkers1.length; i++) {
marker = gmarkers1[i];
// If is same session or session not picked
if (marker.session == session || session.length === 0) {

marker.setVisible(true);


}
// session don't match
else {
marker.setVisible(false);
}
}
}

这是我的选项选择代码以获得值(value):

  <div class="controls">Filter By :
<select id="type" onchange="filterMarkers(this.value);">
<option value="">Merchant Grub</option>
<option value="STARBUCKS">STARBUCKS</option>
<option value="SIMPLY">SIMPLY</option>
<option value="SHIHLIN">SHIHLIN</option>
<option value="RE JUVE">RE JUVE</option>
<option value="PUYO">PUYO</option>
<option value="LOTTERIA">LOTTERIA</option>
<option value="KFC">KFC</option>
<option value="HOP HOP">HOP HOP</option>
<option value="DOMINOS">DOMINOS</option>
<option value="CIRCLE K">CIRCLE K</option>
<option value="CHATIME">CHATIME</option>
<option value="CFC">CFC</option>
<option value="BURGER KING">BURGER KING</option>
<option value="BREADLIFE">BREADLIFE</option>
<option value="BAKMI GM">BAKMI GM</option>
<option value=" AUNTIE ANNE'S">AUNTIE ANNE'S</option>
</select>
</div>

<div class="controls">Filter By :
<select id="type" onchange="filterMarkersx(this.value);">
<option value="">IN SESSION</option>
<option value="false">FALSE</option>
<option value="">TRUE</option>
</select>
</div>

如何链接我的两个过滤器?

例如:如果我在filter by category中选择starbucks,在filter by session中选择false,我可以得到值starbucks false session。

提前致谢

海妖

最佳答案

对我来说这些功能filterMarkersfilterMarkersx并不是真正的“过滤器”,因为它们正在改变 gmarkers ' 项而不是返回此数组的子集。从过滤的 Angular 来看,我会重写代码,例如:

1。声明过滤函数

// returns a filtering function to be passed to Array.prototype.filter parameterized with `category`
var filterByCategory = function (category) {
return function (marker) {
return !category.length || marker.category == category;
}
};

// returns a filtering function to be passed to Array.prototype.filter parameterized with `session`
var filterBySession = function (session) {
return function (marker) {
return !session.length || marker.session == session;
}
};

顺便说一下,因为这些是完全相同的函数,只是改变了被测试的属性,你可以将它们分解为:

var filterBy = function (name, object) {
return function (marker) {
return !object.length || marker[name] == object;
}
};

2。使用过滤器

// set all visibility to false for starters
gmarkers.forEach(function (m) {
m.setVisible(false);
});
// apply chained filtering then set visibility to true on resulting subset
gmarkers
.filter(filterBy('category', category)) // or .filter(filterByCategory(category))
.filter(filterBy('session', session)) // or .filter(filterBySession(session))
.forEach(function (marker) {
marker.setVisible(true);
});

这样您就可以控制是链接过滤器还是只使用其中一个过滤器。

更新:更清晰的用法定义

现在我们有了逻辑,我们想将这段代码连接到您的 HTML。

让我们将 “2. 使用过滤器” 部分的代码包装在一个函数中:

// assuming vanilla JS: binding the function to `document`
// (the purpose is just to make it callable from the HTML)
document.setMarkersVisibility = function () {
// first, fetch data from both <select> (category and session)
var selectCategory = document.getElementById('selectcategory');
var selectSession = document.getElementById('selectsession');
var category = selectCategory.options[selectCategory.selectedIndex].value;
var session = selectSession .options[selectSession .selectedIndex].value;
/* INSERT PART 2. CODE HERE */
};

现在我们需要重构 HTML,因为您的 <select> id 具有相同的值,这是错误的。我们需要调用我们的新功能。鉴于上面的代码,我将它们命名为 selectcategoryselectsession :

<select id="selectcategory" onchange="setMarkersVisibility()">

<select id="selectsession" onchange="setMarkersVisibility()">

这应该是所有需要的。

关于javascript - 尝试链接过滤器选项选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52124525/

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