Javascript 在select2中搜索select属性

Javascript 在select2中搜索select属性,javascript,jquery,select2,Javascript,Jquery,Select2,是否可以在select2中搜索文本和其他属性的组合?例如,用户可以搜索“数据测试”的值和下面的文本: <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> 测试 测试2 测试3 这样

是否可以在select2中搜索文本和其他属性的组合?例如,用户可以搜索“数据测试”的值和下面的文本:

<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>
测试
测试2
测试3
这样搜索“测试2”和“6”会显示相同的单个选项吗

这是在页面加载时绑定的列表上,因此无法在其他位置进行筛选


谢谢-

我认为您必须使用第二个选择器,但您只需根据第一种方法找到的if关闭一个简单的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>
Clicky

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

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)
      })
    });

关于它的文档您可以在这里找到它让我知道这是否适合您的问题

一旦找到它就足够简单了-

创建自定义匹配函数,类似于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;
}
我将“数据('test')”添加到上述函数中,并将初始化更新为:

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

非常好。

我刚刚添加了选择选项数据country name(因为它是一个国家的选择),在oryginal中只有这些国家的短“标签”(例如GB、AF、PL)。 然后在select2.js中,转到在每次按键时启动的函数匹配器(参数、数据),并写道:

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;
}

谢谢你的支持!我已经看到了这一点,但我试图避免使用不推荐使用的函数,matcher示例似乎是循环的。最后,我使用提交的答案中所示的基本select2确定了一个好的解决方案。再次感谢!