我正在使用Leaflet Search和Fuse.js来搜索多个小叶图层以及每个中的多个feature.properties。我终于使代码正常工作了(但是确实很混乱)。唯一的问题是,因为我使用的是filterData,所以当我搜索任何内容而不是完全匹配项时都会显示所有标记。
有什么方法只显示完全匹配?
var fuseOptions = {
shouldSort: true,
tokenize: true,
threshold: 0,
location: 0,
maxPatternLength: 32,
minMatchCharLength: 2,
keys: ['properties.myKey']
};
var fuse = new Fuse(city.features.concat(village.features.concat(gateway.features.concat(trade.features.concat(danger.features.concat(connect.features.concat(forest.features.concat(mine.features.concat(office.features.concat(farm.features.concat(fish.features.concat(annex.features)))))))))), fuseOptions), {
keys: [
'properties.name',
'properties.prod1',
'properties.extraprod1',
'properties.extraprod2',
'properties.extraprod3',
'properties.extraprod4',
'properties.extraprod5',
'properties.buff',
//'properties.operator'
]
});
L.control.search({
initial: false,
layer: allLayers,
collapsed: false,
casesensitive: false,
propertyName: 'name',
container: 'findbox',
filterData: function(text, records) {
var jsons = fuse.search(text),
ret = {}, key;
for(var i in jsons) {
key = jsons[i].properties.name;
ret[ key ]= records[key];
}
console.log(jsons,ret);
return ret;
}
})
.on('search:locationfound', function(e) {
e.layer.openPopup();
})
.addTo(map);
答案 0 :(得分:0)
我不确定这项工作是否可行,但请尝试:
filterData: function(text, records) {
var jsons = fuse.search(text),
ret = {}, key;
for(var i in jsons) {
key = jsons[i].properties.name;
if(key.startsWith(text)){
ret[ key ]= records[key];
}
// Try with and without this line
else { rect[key] = null; }
}
console.log(jsons,ret);
return ret;
}