这个搜索纯粹是前端的内容,就使用了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;
}