2016-10-21 39 views
1

我使用Select2來對我的選擇框進行樣式設置並添加功能,我想知道如何讓搜索規則更加寬鬆。目前,如果我在下拉菜單中選擇「新墨西哥州」,則可以搜索「墨西哥」或「新墨西哥州」以匹配選擇選項,但如果輸入「墨西哥新」,我會得到「未找到結果」。有沒有辦法擴展搜索功能以匹配搜索詞,而不管它們的順序如何?Select2 - 搜索通配符匹配

$(document).ready(function() { 
 
    $(".states").select2(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/> 
 
<select class="states" style="width: 50%"> 
 
    <option value="NH">New Hampshire</option> 
 
    <option value="NJ">New Jersey</option> 
 
    <option value="NM">New Mexico</option> 
 
    <option value="TB">Tshirt, Black</option> 
 
</select>

+0

我不知道是否這聽起來不錯,但你可以分割的搜索字詞,然後搜索單獨的條款... – gkb

回答

4

好吧,顯然你可以設置custom matchers做到這一點。我發現this one,它似乎是工作根據需要:

$(function() { 
 
    $('.states').select2({ 
 
     matcher: function (params, data) { 
 
      if ($.trim(params.term) === '') { 
 
       return data; 
 
      } 
 

 
      keywords=(params.term).split(" "); 
 

 
      for (var i = 0; i < keywords.length; i++) { 
 
       if (((data.text).toUpperCase()).indexOf((keywords[i]).toUpperCase()) == -1) 
 
       return null; 
 
      } 
 
      return data; 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script> 
 
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet"/> 
 
<select class="states" style="width: 50%"> 
 
    <option value="NH">New Hampshire</option> 
 
    <option value="NJ">New Jersey</option> 
 
    <option value="NM">New Mexico</option> 
 
    <option value="TB">Tshirt, Black</option> 
 
</select>