关于这个问题,我做了测试,是代码实现方式造成的。代码是通过样式叠加,把不符合条件的项目display设成none,再一次性添加给style元素,就是那一行赋值代码执行了几秒钟,隐藏越多执行得越慢,跟浏览器的解析有关。后来我改变了实现方式,用循环语句逐个隐藏,700多个应该能缩短到几十到几百毫秒。 另外,还可以修改一下,扩展到三级分类,侧边页可以做成中文导航,动态加载。这插件还是不错的。
关键代码如下:
searchCustom: function(keyword) { //自定义搜索函数,改变搜索方式
var self = this;
keyword = (keyword || '').toLowerCase();
var selectorBuffer = [];
var selectorBuffer2=[];//
var groupIndex = -1;
var itemCount = 0;
var liArray = self.el.liArray;
var itemTotal = liArray.length;
self.hiddenGroups = [];
var checkGroup = function(currentIndex, last) {
if (itemCount >= currentIndex - groupIndex - (last ? 0 : 1)) {
selectorBuffer.push('.mui-indexed-list-inner li:nth-child(' + (groupIndex + 1) + ')');
selectorBuffer2.push((groupIndex + 1));
self.hiddenGroups.push(liArray[groupIndex]);
};
groupIndex = currentIndex;
itemCount = 0;
}
liArray.forEach(function(item) {
var currentIndex = liArray.indexOf(item);
if (item.classList.contains('mui-indexed-list-group')) {
checkGroup(currentIndex, false);
} else {
var text = (item.innerText || '').toLowerCase();
if (keyword && text.indexOf(keyword) < 0) {
selectorBuffer.push('.mui-indexed-list-inner li:nth-child(' + (currentIndex + 1) + ')');
selectorBuffer2.push((currentIndex + 1) );
itemCount++;
}
if (currentIndex >= itemTotal - 1) {
checkGroup(currentIndex, true);
}
}
});
liArray.forEach(function(item){
item.style.display="block";
});
if (selectorBuffer.length >= itemTotal) {
self.el.inner.classList.add('empty');
} else if (selectorBuffer.length > 0) {
self.el.inner.classList.remove('empty');
mui.each(selectorBuffer2,function(idx,item){
if(item>0){
liArray[item-1].style.display="none";
}
});
} else {
self.el.inner.classList.remove('empty');
self.el.styleForSearch.innerText = "";
}
},
bindSearchEvent: function() {
var self = this;
self.el.searchInput.addEventListener('input',function(event) {
var keyword = this.value;
if(keyword==self.el.oldKeyword){
return;
}
self.el.oldKeyword=keyword;
//if(mui.os.android && parseFloat(mui.os.version) <= 4.3){
self.searchCustom(keyword);
//}else{
// self.search(keyword);
//}
}, false);
$(self.el.search).on('tap', classSelector('icon-clear'), function() {
self.searchCustom('');
}, false);
},
3 个回复
小飞牛
关于这个问题,我做了测试,是代码实现方式造成的。代码是通过样式叠加,把不符合条件的项目display设成none,再一次性添加给style元素,就是那一行赋值代码执行了几秒钟,隐藏越多执行得越慢,跟浏览器的解析有关。后来我改变了实现方式,用循环语句逐个隐藏,700多个应该能缩短到几十到几百毫秒。 另外,还可以修改一下,扩展到三级分类,侧边页可以做成中文导航,动态加载。这插件还是不错的。
关键代码如下:
TS
不错,赞一个
2***@qq.com
不错,可以用 不过还是有点慢