javascript - 根据输入字段对数据列表项进行排序
问题描述
我有一个输入字段,其中有一个大(10000 项)数据列表作为自动完成源。数据列表是从服务器端动态生成的。
<input type="text" name="medicine" required="" list="list__medicine-list" id="id_medicine" class="form-input mb-4">
<datalist id="list__medicine-list">
<option value="1stCef (Cefadroxil Monohydrate)" medicine_id="1"></option>
<option value="2ndCef (Cefaclor Monohydrate)" medicine_id="2"></option>
<option value="3-C (Cefixime Trihydrate)" medicine_id="3"></option>
<!-- -->
<!-- -->
<!-- -->
<option value="Zinc (Zinc Sulphate)" medicine_id="11303"></option>
</datalist>
我可以在输入字段中输入,它会使用输入的字符自动完成。但它会在中间匹配,而不是根据我在输入字段中输入的内容对数据列表进行排序。
我想对数据列表项进行排序,以便显示匹配的首字母(对于示例图像,它将硫酸锌带到顶部)。如何在不使用自定义 javascript 对服务器进行 ajax 调用的情况下做到这一点?
解决方案
从这个答案中可以看出,修改数据列表匹配行为真的很困难。因此,我使用select2
withdjango-autocomplete-light
实现了一个 ajax 调用,以使用以下 SQL 更新选择字段。
SELECT * FROM {table_name}
WHERE {table_name}.brand_name LIKE '%%{query}%%'
OR {table_name}.generic_name LIKE '%%{query}%%'
ORDER BY CASE
WHEN {table_name}.brand_name LIKE '{query}%%' THEN 1
WHEN {table_name}.generic_name LIKE '{query}%%' THEN 2
WHEN {table_name}.brand_name LIKE '%%{query}%%' THEN 3
WHEN {table_name}.generic_name LIKE '%%{query}%%' THEN 4
WHEN {table_name}.brand_name LIKE '%%{query}' THEN 5
WHEN {table_name}.generic_name LIKE '%%{query}' THEN 6
END;
我欢迎任何其他仅涉及 html5/js 的答案。
推荐阅读
- python-3.x - 在 Python 中按列分组以获得总计数
- c++ - 类划分头和定义文件
- java - 我安装了最新可用的 Android Studio 3.4.2,当我尝试运行基本应用程序时,它显示这些错误
- mojolicious - 在 Mojolicious 中将任意名称的变量传递给模板
- xml - 如何访问 XML 响应的子级 - Google Apps 脚本
- vue.js - 在 nginx 上启用 CORS 时出现问题,请求问题
- javascript - 动态分配 pjax 容器
- python - 使用 Pandas 将日期+小时列分为两列(格式日期、数字)-Python
- php - 未定义属性:stdClass::$username(查看:/home/annonces/resources/views/welcome.blade.php)
- java - How to set AUTO_ACKNOWLEDGE on SQS with Spring JMS?