自定义过滤策略(拼音支持)

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>