我需要将过滤器应用于项目集合中的n个类别。每个分类都有2到5个子类别。这是:
Category a: a1, a2
Category b: b1, b2, b3
Category c: c1, c2
Category d: d1, d2 d3
Category e: e1, e2, e3, e4, e5
我的项目列表包含以下类:
class="a1 c4 e5"
每个项目只能属于每个类别的一个子类别。
使用jquery我可以选择相同类别(联合)中的项目,如下所示:
$(".b1, .b2")
来自差异类别(交集)的项目如下:
$(".a2.b3.d1")
这是我的问题:
如果我选择子类别列表:
mylist = [a1, b1, b3, d2, e2, e4, e5]
最终选择器将有6组元素(来自mylist,相同类别元素的乘积:1 x 2 x 1 x 3 = 6),用逗号分隔,每组4个元素(mylist指4个类别: a,b,d和e)。这是:
myselector = $(.e2.b1.a1.d2,
.e4.b3.a1.d2,
.e5.b1.a1.d2,
.e2.b3.a1.d2,
.e4.b1.a1.d2,
.e5.b3.a1.d2)
我不知道如何编写一个在myselector中转换mylist的函数。 任何帮助将不胜感激。
答案 0 :(得分:1)
我有一个想法如下:
myList
数组中的子类别数组。以下是代码和演示on JsBin
// The list of all sub categories
myList = [".a1", ".b1", ".b3", ".d2", ".e2", ".e4", ".e5"];
// The function to get the category of a particular subcategory
function getCategory(subCat){
return subCat.substr(1, 1);
}
// The function to build our selector recursively
function buildSelector(categoryList, categoryIndexArray, categoryIndex)
{
if (categoryIndex == categoryIndexArray.length - 1)
return categoryList[categoryIndexArray[categoryIndex]];
else {
var results = [];
var subList = buildSelector(categoryList, categoryIndexArray, categoryIndex + 1);
$.each(categoryList[categoryIndexArray[categoryIndex]],function(_,e){
$.each(subList,function(_,e1){
results.push(e + e1);
});
});
return results;
}
}
var categories = {};
var categoryArray = [];
// build the categories and categoryArray
$.each(myList,function(_,e){
var cat = getCategory(e);
if (categories[cat] === undefined)
{
categories[cat] = [];
categoryArray.push(cat);
}
if (categories[cat].indexOf(e) < 0)
categories[cat].push(e);
});
// build our selector as array of groups
var selectors = buildSelector(categories, categoryArray, 0);
// join all selector groups to get the string form
console.log(selectors.join(","));