如何使 select2 搜索按字母顺序开始?
how to make select2 search start alphabetical?
我在我的文章跟踪应用程序中使用 select2 进行标签搜索,我注意到当您开始输入 "m"、"mi" 时,您会认为 'migrations' 会突出显示首先,而是它以具有 'm' 的任何内容开头,例如表单。如图所示,'forms' 最先出现,越搜索越烦人。
如果您键入 'mi',我希望首先出现以 'mi' 开头的任何内容,而不是它会包括诸如 'forms-middle' 之类的具有 m 和 i 的内容。如何根据拼写正确制作 select2 查找标签?谢谢
原样的答案由于某种原因不起作用,文档中也没有提供默认答案:
<select style="width:90%;" multiple="multiple" id="selected_tags" name="selected_tags">
{% for tag in tags %}
<option value="{{tag.slug}}">{{tag.name}}</option>
{% endfor %}
</select>
....
$(document).ready(function() {
$("#selected_tags").select2({
sortResults: function(results, container, query) {
if (query.term) {
// use the built in javascript sort function
return results.sort(function(a, b) {
if (a.text.length > b.text.length) {
return 1;
} else if (a.text.length < b.text.length) {
return -1;
} else {
return 0;
}
});
}
return results;
}
});
});
您可以对结果进行排序,请检查 documentation here. Sort based on the queried string index. You can use javascript build in sort()
方法对结果数组进行排序。
$("#e1").select2({
sortResults: function(results, container, query) {
console.log(query);
if (query.term) {
// use the built in javascript sort function
return results.sort(function(a, b) {
console.log(a.text.indexOf(query),b.text.indexOf(query));
if (a.text.indexOf(query.term) > b.text.indexOf(query.term)) {
return 1;
} else if (a.text.indexOf(query.term) < b.text.indexOf(query.term)) {
return -1;
} else {
return 0;
}
});
}
return results;
}
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2-bootstrap.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.js"></script>
<select id="e1">
<option value="AL">Alabama</option>
<option value="WY">Wyoming</option>
<option value="WY">sdsd</option>
<option value="WY">aasd</option>
<option value="WY">aaas</option>
<option value="WY">qwer</option>
<option value="WY">sqwqw</option>
<option value="WY">cxncmx</option>
<option value="WY">snamsnam</option>
</select>
我在我的文章跟踪应用程序中使用 select2 进行标签搜索,我注意到当您开始输入 "m"、"mi" 时,您会认为 'migrations' 会突出显示首先,而是它以具有 'm' 的任何内容开头,例如表单。如图所示,'forms' 最先出现,越搜索越烦人。
如果您键入 'mi',我希望首先出现以 'mi' 开头的任何内容,而不是它会包括诸如 'forms-middle' 之类的具有 m 和 i 的内容。如何根据拼写正确制作 select2 查找标签?谢谢
原样的答案由于某种原因不起作用,文档中也没有提供默认答案:
<select style="width:90%;" multiple="multiple" id="selected_tags" name="selected_tags">
{% for tag in tags %}
<option value="{{tag.slug}}">{{tag.name}}</option>
{% endfor %}
</select>
....
$(document).ready(function() {
$("#selected_tags").select2({
sortResults: function(results, container, query) {
if (query.term) {
// use the built in javascript sort function
return results.sort(function(a, b) {
if (a.text.length > b.text.length) {
return 1;
} else if (a.text.length < b.text.length) {
return -1;
} else {
return 0;
}
});
}
return results;
}
});
});
您可以对结果进行排序,请检查 documentation here. Sort based on the queried string index. You can use javascript build in sort()
方法对结果数组进行排序。
$("#e1").select2({
sortResults: function(results, container, query) {
console.log(query);
if (query.term) {
// use the built in javascript sort function
return results.sort(function(a, b) {
console.log(a.text.indexOf(query),b.text.indexOf(query));
if (a.text.indexOf(query.term) > b.text.indexOf(query.term)) {
return 1;
} else if (a.text.indexOf(query.term) < b.text.indexOf(query.term)) {
return -1;
} else {
return 0;
}
});
}
return results;
}
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2-bootstrap.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/3.5.2/select2.js"></script>
<select id="e1">
<option value="AL">Alabama</option>
<option value="WY">Wyoming</option>
<option value="WY">sdsd</option>
<option value="WY">aasd</option>
<option value="WY">aaas</option>
<option value="WY">qwer</option>
<option value="WY">sqwqw</option>
<option value="WY">cxncmx</option>
<option value="WY">snamsnam</option>
</select>