搜索select2

时间:2016-03-15 20:53:36

标签: javascript jquery select2

是否可以在select2中搜索文本和其他属性的组合?例如,用户是否可以搜索" data-test"的值。和下面的文字:

<option value="185" data-test="5">Test</option>
<option value="186" data-test="6">Test 2</option>
<option value="187" data-test="7">Test 3</option>

这样就可以搜索&#34;测试2&#34;和&#34; 6&#34;显示相同的单一选项?

这是在页面加载的绑定列表中,因此无法在其他位置进行过滤。

谢谢 -

4 个答案:

答案 0 :(得分:4)

一旦找到它就很简单 -

创建自定义匹配函数,类似于select2.js中的“matcher”:

function customMatcher(params, data) {
    // Always return the object if there is nothing to compare
    if ($.trim(params.term) === '') {
        return data;
    }

    ... OTHER MATCHING CODE


    // Check if the text contains the term
    if (original.indexOf(term) > -1) {
        return data;
    }

    // Check if the data occurs
    if ($(data.element).data('test').toString().indexOf(params.term) > -1) {
        return data;
    }

    // If it doesn't contain the term, don't return anything
    return null;
}

我在上面的函数中添加了“data('test')”并将初始化更新为:

    $("#ddl").select2({
        matcher: customMatcher
    });

效果很好。

答案 1 :(得分:1)

您可以创建自己的自定义匹配器,这是您的示例:

function matchStart (term, text, option) {
      console.log($(option.element).data("test"));
      if (text.toUpperCase().indexOf(term.toUpperCase()) == 0 || ($(option.element).data("test") !== undefined && $(option.element).data("test") == term)) {
        return true;
      }

      return false;
    }

    $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
      $("select").select2({
        matcher: oldMatcher(matchStart)
      })
    });

有关它的文档,你可以在https://select2.github.io/announcements-4.0.html#new-matcher找到它,让我知道这是否适合你的问题

答案 2 :(得分:0)

我刚刚添加了选项选项data-country-name(因为它是国家的选择),oryginal只有短标签&#39;这些国家(例如GB,AF,PL)。 然后在select2.js中找到函数匹配器(params,data),它在每个keyPress上启动,并写道:

var dataAttr = String(data.element.getAttribute('data-country-name'));
var termP = stripDiacritics(params.term).toUpperCase();
var org = stripDiacritics(dataAttr).toUpperCase();
if (org.indexOf(termP) > -1) {
        return data;
}

答案 3 :(得分:-1)

我认为你必须处理第二个选择器,但你可以根据第一种方式找到一个简单的if语句切换:

$( 'button' ).click(function() {
    var found = $("option[data-test='6']");

    if(typeof found == 'undefined'){
      found = $('option[text="Test 2"]');
    }

    alert(found.val());

});

你也必须添加一个按钮。

<button >Clicky</button>