自定义过滤策略(拼音支持)
Source
        Output
        QRCode
    <!DOCTYPE html>
<html>
<head>
	<meta charset='utf-8'>
	<title>自定义过滤策略(拼音支持)</title>
	<link rel="stylesheet" type="text/css" href="//g.alicdn.com/kissy/k/5.0.1/css/base.css">
	<link rel="stylesheet" type="text/css" href="//g.alicdn.com/kissy/k/5.0.1/button/assets/dpl.css">
	<link rel="stylesheet" type="text/css" href="assets/menu.css">
	<link rel="stylesheet" type="text/css" href="assets/menuitem.css">
	<link rel="stylesheet" type="text/css" href="assets/submenu.css">
	<link rel="stylesheet" type="text/css" href="assets/filtermenu.css">
	<style>
        body{
            background: #fff;
        }
        .hasChildren .ks-menuitem-content {
            background: url("http://a.tbcdn.cn/apps/sell/1.0/img/ic_bg.png") no-repeat scroll 500px 500px transparent;
            background-position: 100% -78px;
        }
        .ks-menuitem-selected {
            background-color: #D6EDF4;
            color: #1B4D91;
        }
        .ks-menuitem-hit {
            font-weight: bold;
            color: red;
        }
        .ks-menuitem {
            padding-right: 10px;
        }
    </style>
	<script type="text/javascript" src="//g.alicdn.com/kissy/k/5.0.1/seed-debug.js"></script>
</head>
<body>
	<div class="wrap" style="width:90%;margin:0 auto;">
		<h1>自定义过滤策略(拼音支持)</h1>
		<h3>操作指南</h3>
		<ol>
		    <li>可在输入框输入中文或简拼过滤</li>
		    <li>上下键过滤项间导航</li>
		    <li>点击item或按下回车按钮可触发click事件</li>
            <li>点击 reset 按钮重置用户输入</li>
		</ol>
		<div id="container">
			
		</div>
		<div class="ks-button ks-button-info" id="reset" style="margin-top:10px;">reset</div>
	</div>
	
	<script type="text/javascript">
	require(['util','menu','filter-menu','node'], function(util, Menu, FilterMenu, $){
		var m1 = new Menu.Item({
            selectable: true,
            content: "女鞋",
            pinyin: "nx"
        });
        var m4 = new Menu.Item({
            selectable: true,
            content: "女装女服",
            pinyin: "nznf"
        });
        var m2 = new Menu.Item({
            selectable: true, content: "家居服务",
            elCls: "hasChildren",
            pinyin: "jjfw"
        });
        var m3 = new Menu.Item({
            selectable: true,
            content: "手机",
            elCls: "hasChildren",
            pinyin: "sj"
        });
        var filterMenu = new FilterMenu({
            render: "#container",
            width: 500,
            placeholder: "请输入中文或简拼"
        });
        filterMenu.addChild(m1);
        filterMenu.addChild(m2);
        filterMenu.addChild(m3);
        filterMenu.addChild(m4);
        filterMenu.render();
        var selected = null;
        var origFilterItems = filterMenu.filterItems;
        /**
         * 自定义过滤策略,不自定义则是简单的内容 indexOf 查找
         * @param str
         */
        filterMenu.filterItems = function (str) {
            var self = this,
                _labelEl = self.get("placeholderEl"),
                filterInput = self.get("filterInput");
            // 有过滤条件提示隐藏,否则提示显示
            _labelEl[str ? 'hide' : 'show']();
            var children = self.get('children');
            // 拼音
            if (new RegExp('^[a-z\s]+', 'i').test(str)) {
                // 过滤所有子组件
                util.each(children, function (c) {
                    var pinyin = c.get("pinyin"),
                        content = c.get("content");
                    var index;
                    if ((index = pinyin.indexOf(str)) > -1) {
                        // 如果符合过滤项
                        // 显示
                        c.show();
                        content = content.substring(0, index) +
                                "<span class='" + "ks-menuitem-hit" + "'>" +
                                content.substring(index, index + str.length)
                                + "<" + "/span>"
                                + content.substring(index + str.length, content.length);
                        // 匹配子串着重 wrap
                        c.get('el').html(content);
                    } else {
                        c.hide();
                    }
                });
            } else {
                origFilterItems.call(this, str);
            }
        };
        filterMenu.on("click", function (e) {
            if (selected != e.target) {
                selected && selected.set("selected", false);
                selected = e.target;
                alert("selected : " + selected.get("content"));
            }
        });
        
        $("#reset").on("click", function () {
            filterMenu.reset();
        });
	})
	</script>
</body>
</html>
         
		