想要添加和搜索此增量搜索插件

时间:2016-11-04 06:37:54

标签: javascript jquery regex search

我想将AND搜索功能添加到以下增量搜索jQuery插件中,该插件可以从选择框中搜索选项元素。 JSFiddle 我正在尝试做这些想法,但无法成功编码。 - 首先,我想将空格定义为分隔符。 - 接下来我想将该变量与选项元素中的其他空格区分开来。

顺便说一下,我不想替换很多DOM元素。 所以,我不想使用像selectize.js这样的插件,无论如何都要使用nether datalist元素。

有人帮忙吗?

(function ($, window, document, undefined) {
'use strict';

var pluginName = "selectboxsearch",
    defaults = {
        delay: 100,
        bind: 'keyup',
    };

function Plugin(element, target, options) {
    this.element = element;
    this.$element = $(element);
    this.target = target;
    this.options = $.extend({}, defaults, options);
    this._defaults = defaults;
    this._name = pluginName;

    this.vars = {
        optionRows: $(this.target).children().map(function () {
            return this;
        })
    };

    this.init();
}

Plugin.prototype = {
    init: function () {
        var self = this,
            delay = this.options.delay;

        this.$element.on(this.options.bind, function () {
            var timeout = window.setTimeout(function () {
                self.go();
            }, delay);

        });
    },

    go: function () {
        var array = this.vars.optionRows,
            val = this.$element.val();
          //一周目のみ
        for (var n = 0; n < 1; n++) {
            // いったん削除
            $(this.target).children().remove();
            for (var i = 0, len = array.length; i < len; i++) {
                if (array[i]) {
               //option内のスペースを除去
                    var pos = array[i].innerHTML.toLowerCase().replace(/ /g,'').indexOf(val, 0);
                    // キーワードが空、もしくはヒットした場合要素追加
                    if ((val.replace(/ /g,'').length === 0) || pos >= 0) {
                        $(this.target).append(array[i]);
                    }
                }
            }
        }
    },

    additem: function (items) {
        var self = this,
            array = this.vars.optionRows,
            len = this.vars.optionRows.length;

        $.each(items, function (index, item) {
            var add = true;
            for (var i = 0, len; i < len; i++) {
                if (item.value == array[i].value) {
                    add = false;
                }
            }
            if (add == true) {
                array.push(item);
            }
        });

        this.vars.optionRows = array;
        self.go();
    },

    delitem: function (items) {
        var self = this,
            array = [];

        $.each(this.vars.optionRows, function (index, item) {
            var del = false;
            for (var i = 0, len = items.length; i < len; i++) {
                if (item.value == items[i].value) {
                    del = true;
                }
            }
            if (del == false) {
                array.push(item);
            }
        });

        this.vars.optionRows = array;
        self.go();
    }
};

$.fn[pluginName] = function (target, options) {
    return this.each(function () {
        if (!$.data(this, "plugin_" + pluginName)) {
            $.data(this, "plugin_" + pluginName, new Plugin($(this), target, options));
        }
    });
};
function _fnGetMaxLenString(settings, colIdx) {
var s, max = -1,
  maxIdx = -1;

for (var i = 0, ien = settings.aoData.length; i < ien; i++) {
  s = _fnGetCellData(settings, i, colIdx, 'display') + '';
  s = s.replace(__re_html_remove, '');
  s = s.replace('&nbsp;', ' ');

  if (s.length > max) {
    max = s.length;
    maxIdx = i;
  }
}

return maxIdx;
 }
     })(jQuery, window, document);

0 个答案:

没有答案