这个搜索纯粹是前端的内容,就使用了js来写。
大概思路:
给列表的每一项加一个match
属性,为真表示匹配,为假表示不匹配。
然后遍历所有列表项,判断每一个列表项是否匹配。
具体判断是否匹配使用for循环遍历该项下的所有文本,然后与搜索串进行对比。
(用了js的indexOf()
这玩意没用KMP算法,貌似是为了怕空间炸掉,姑且先用着吧,毕竟自己写KMP又要考虑可能存在的中英文编码的坑了)
本来还考虑到如果属性也是一个对象或者列表时,递归进去继续找来着,发现好像没这个需求,就算了。
这条pr涉及到的改动Merge pull request #19 from OhYee/dev 管理员界面搜索
代码如下:
/* 列表搜索 */ function searchItem(obj, text) { // console.log(obj, text) var len = obj.length; var noMatch = true; if (text == "") { noMatch = false; for (var i = 0; i < len; ++i) obj[i].match = true; } else { for (var i = 0; i < len; ++i) { var thisMatch = false; var thisItem = obj[i]; // console.log("search ", thisItem); for (var key in thisItem) { var value = thisItem[key]; // console.log(" search ", key, " ", value) if (typeof (value) == "string" && value.toLowerCase().indexOf(text.toLowerCase()) > -1) { thisMatch = true; } } thisItem.match = thisMatch; noMatch |= thisMatch; } } return noMatch; }