zoukankan      html  css  js  c++  java
  • mui-picker 增加过滤

    /**
    * 弹出选择列表插件
    * 此组件依赖 listpcker ,请在页面中先引入 mui.picker.css + mui.picker.js
    * varstion 1.0.1
    * by Houfeng
    * Houfeng@DCloud.io
    */
    
    (function($, document) {
    
    //创建 DOM
    $.dom = function(str) {
    if (typeof(str) !== 'string') {
    if ((str instanceof Array) || (str[0] && str.length)) {
    return [].slice.call(str);
    } else {
    return [str];
    }
    }
    if (!$.__create_dom_div__) {
    $.__create_dom_div__ = document.createElement('div');
    }
    $.__create_dom_div__.innerHTML = str;
    return [].slice.call($.__create_dom_div__.childNodes);
    };
    
    var panelBuffer = '<div class="mui-poppicker">
    <div class="mui-poppicker-header" style="text-align:center">
    <button class="mui-btn mui-poppicker-btn-cancel">取消</button>
    <button class="mui-btn mui-btn-blue mui-poppicker-btn-ok">确定</button>
    <div class="mui-poppicker-clear"></div>
    </div>
    <div class="mui-poppicker-body">
    </div>
    </div>';
    var panelBuffer2 = '<div class="mui-poppicker">
    <div class="mui-poppicker-header" style="text-align:center">
    <button class="mui-btn mui-poppicker-btn-cancel">取消</button>
    <input style="height:30px;60%;color:black;margin:3px;font-size:12px;" type="text" class="mui-poppicker-input" placeholder="请输入查询内容"></input>
    <button class="mui-btn mui-btn-blue mui-poppicker-btn-ok">确定</button>
    <div class="mui-poppicker-clear"></div>
    </div>
    <div class="mui-poppicker-body">
    </div>
    </div>';
    
    var pickerBuffer = '<div class="mui-picker">
    <div class="mui-picker-inner">
    <div class="mui-pciker-rule mui-pciker-rule-ft"></div>
    <ul class="mui-pciker-list">
    </ul>
    <div class="mui-pciker-rule mui-pciker-rule-bg"></div>
    </div>
    </div>';
    
    //定义弹出选择器类
    var PopPicker = $.PopPicker = $.Class.extend({
    //构造函数
    init: function(options) {
    var self = this;
    self.options = options || {};
    self.options.buttons = self.options.buttons || ['取消', '确定'];
    self.panel = $.dom(panelBuffer2)[0];
    document.body.appendChild(self.panel);
    self.ok = self.panel.querySelector('.mui-poppicker-btn-ok');
    self.cancel = self.panel.querySelector('.mui-poppicker-btn-cancel');
    self.body = self.panel.querySelector('.mui-poppicker-body');
    self.mask = $.createMask();
    self.cancel.innerText = self.options.buttons[0];
    self.ok.innerText = self.options.buttons[1];
    
    // 添加搜索功能
    self.searchInput = self.panel.querySelector('.mui-poppicker-input');
    self.searchInput.addEventListener('tap', function(event) {
    self.searchInput.focus();
    }, false);
    self.searchInput.addEventListener('input', function(event) {
    var searchText = self.searchInput.value;
    self.filterData(searchText);
    }, false);
    
    self.cancel.addEventListener('tap', function(event) {
    self.hide();
    }, false);
    self.ok.addEventListener('tap', function(event) {
    if (self.callback) {
    var rs = self.callback(self.getSelectedItems());
    if (rs !== false) {
    self.hide();
    }
    }
    }, false);
    self.mask[0].addEventListener('tap', function() {
    self.hide();
    }, false);
    self._createPicker();
    //防止滚动穿透
    self.panel.addEventListener($.EVENT_START, function(event) {
    event.preventDefault();
    }, false);
    self.panel.addEventListener($.EVENT_MOVE, function(event) {
    event.preventDefault();
    }, false);
    },
    _createPicker: function() {
    var self = this;
    var layer = self.options.layer || 1;
    var width = (100 / layer) + '%';
    self.pickers = [];
    for (var i = 1; i <= layer; i++) {
    var pickerElement = $.dom(pickerBuffer)[0];
    pickerElement.style.width = width;
    self.body.appendChild(pickerElement);
    var picker = $(pickerElement).picker();
    self.pickers.push(picker);
    pickerElement.addEventListener('change', function(event) {
    var nextPickerElement = this.nextSibling;
    if (nextPickerElement && nextPickerElement.picker) {
    var eventData = event.detail || {};
    var preItem = eventData.item || {};
    nextPickerElement.picker.setItems(preItem.children);
    }
    }, false);
    }
    },
    //填充数据
    setData: function(data) {
    var self = this;
    self.data = data || [];
    self.pickers[0].setItems(self.data);
    },
    //获取选中的项(数组)
    getSelectedItems: function() {
    var self = this;
    var items = [];
    for (var i in self.pickers) {
    var picker = self.pickers[i];
    items.push(picker.getSelectedItem() || {});
    }
    return items;
    },
    //显示
    show: function(callback) {
    var self = this;
    self.callback = callback;
    self.mask.show();
    document.body.classList.add($.className('poppicker-active-for-page'));
    self.panel.classList.add($.className('active'));
    //处理物理返回键
    self.__back = $.back;
    $.back = function() {
    self.hide();
    };
    },
    //隐藏
    hide: function() {
    var self = this;
    if (self.disposed) return;
    self.panel.classList.remove($.className('active'));
    self.mask.close();
    document.body.classList.remove($.className('poppicker-active-for-page'));
    //处理物理返回键
    $.back=self.__back;
    },
    dispose: function() {
    var self = this;
    self.hide();
    setTimeout(function() {
    self.panel.parentNode.removeChild(self.panel);
    for (var name in self) {
    self[name] = null;
    delete self[name];
    };
    self.disposed = true;
    }, 300);
    },
    // 过滤数据
    filterData: function(searchText){
    var self = this;
    var newData = JSON.parse(JSON.stringify(self.data));
    var layer = self.options.layer || 1;
    
    // 根据layer获取最底级数据 调用deleteItem()
    function getBottomChildren(data, k){
    if(k < layer){
    data.forEach(function(item){
    if(item.children != undefined && item.children.length > 0){
    getBottomChildren(item.children, (k + 1));
    }
    })
    }else{
    deleteItem(data);
    }
    }
    getBottomChildren(newData, 1);
    
    // 删除不匹配的数据
    function deleteItem(data){
    for (var i = data.length - 1; i >= 0; i--) {
    var text = data[i].text || data[i];
    if(text.indexOf(searchText) < 0) {
    data.splice(i, 1);
    }
    }
    }
    
    // 删除子数据为空的父数据
    function deleteNullChildren(data, j){
    if(j < layer){
    for (var i = data.length - 1; i >= 0; i--) {
    if(data[i].children == undefined || data[i].children.length == 0){
    data.splice(i, 1);
    }else{
    deleteNullChildren(data[i].children, (j + 1));
    }
    }
    }
    }
    for(var n = 0; n < layer; n++){
    deleteNullChildren(newData, 1);
    }
    
    // 重新设置data
    self.pickers[0].setItems(newData);
    }
    });
    
    })(mui, document);
    

      

  • 相关阅读:
    [CTF]Capture The Flag -- 夺旗赛
    [DesignPattern]Builder设计模式
    [Git]Git 常用的操作命令
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
    QT 实现 读取 增加 删除 实时操作xml
    QT5-图形视图框架
    C++之QT
    ,即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
    要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给
    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
  • 原文地址:https://www.cnblogs.com/kelly07/p/10275282.html
Copyright © 2011-2022 走看看