首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用jQuery的自定义下拉选项排序

使用jQuery的自定义下拉选项排序
EN

Stack Overflow用户
提问于 2020-04-27 14:01:07
回答 2查看 408关注 0票数 3

我需要帮助排序下拉菜单的选项。我有以下几点:

代码语言:javascript
运行
AI代码解释
复制
<select name="models" id="models">
    <option value="14b">14b</option>
    <option value="ab">ab</option>
    <option value="14">14</option>
    <option value="bc">bc</option>
    <option value="15">15</option>
    <option value="101">101</option>
    <option value="13">13</option>
</select>

我想对选项进行排序,使其显示如下:

代码语言:javascript
运行
AI代码解释
复制
<select name="models" id="models">
    <option value="ab">ab</option>
    <option value="bc">bc</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="14b">14b</option>
    <option value="15">15</option>
    <option value="101">101</option>
</select>

下拉列表将有两种类型的条目,以数字开头的条目和以字母开头的条目。我想首先简单地按字母顺序对以字母开头的内容进行排序,并将它们放在下拉列表的开头。然后,一些以数字开头的单词在结尾偶尔会有一个或两个字母。有字母的将被认为比没有字母的多一步,并将放置在后面,因此顺序将是14 > 14b > 15,例如

我搜索并找到了几篇关于如何对列表/下拉列表进行排序的帖子,但这有点复杂,我似乎不能自己想出如何将所有东西拼凑在一起。有人能帮帮忙吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-27 15:11:23

我们可以这样做(vanilla JS):

(本质上,将子项放入数组中,对它们进行排序,然后按照排序后的数组的顺序再次追加它们-本质上是将它们移动到正确的顺序)

(排序函数主要检查a和b是否都有可以解析的整数-如果有,则比较这些整数,如果它们相等,则比较数字后的字母。如果两者都只是字母,则仅进行文本比较。如果a只有字母,b至少有数字,则a在前,反之亦然)

代码语言:javascript
运行
AI代码解释
复制
const select = document.querySelector('#models');

[...select.children].sort(mySort).map(node => select.appendChild(node));
console.log([...select.children]);

function mySort(a,b) {  
  const [a_val, b_val]  = [a.value, b.value];
  
  if (Math.abs(parseInt(a_val) - parseInt(b_val)) >= 0){
    //both are numbers (or at least start with numbers)
    if (parseInt(a_val) - parseInt(b_val) == 0){
      //then we need to compare the letters after too:
      const a_letters = a_val.replace(parseInt(a_val), "");
      const b_letters = b_val.replace(parseInt(b_val), "");
      return a_letters.localeCompare(b_letters)
    } else {
      //the letters after don't matter for comparison:
      return parseInt(a_val) - parseInt(b_val)
    }        
  } else if(Math.abs(parseInt(a_val)) >= 0) {
    //only a is a number, so b goes first:
    return 1;    
  } else if(Math.abs(parseInt(b_val)) >= 0) {
    //only b is a number, so a goes first:
    return -1;    
  } else {
    //both are letters only so do a textual comparison:
    return a_val.localeCompare(b_val)
  }  
    
}
代码语言:javascript
运行
AI代码解释
复制
<select name="models" id="models">
    <option value="14b">14b</option>
    <option value="ab">ab</option>
    <option value="14">14</option>
    <option value="bc">bc</option>
    <option value="15">15</option>
    <option value="101">101</option>
    <option value="13">13</option>
</select>

输出:

票数 1
EN

Stack Overflow用户

发布于 2020-04-27 14:51:51

尝尝这个

代码语言:javascript
运行
AI代码解释
复制
function natcmp(a, b) {
    var ra = a.innerText.match(/\D+|\d+/g);
    var rb = b.innerText.match(/\D+|\d+/g);
    var r = 0;

    while(!r && ra.length && rb.length) {
        var x = ra.shift(), y = rb.shift(),
            nx = parseInt(x), ny = parseInt(y);
        if(isNaN(nx) && isNaN(ny))
           { r = x > y ? 1 : -1}
        else if(isNaN(nx) || isNaN(ny))
           { r = x < y ? 1 : (x > y ? -1 : 0); }
        else
            r = nx - ny;
    }
    return r || ra.length - rb.length;
}


$("#models").html(
Array.prototype.slice.call($("#models")[0].querySelectorAll("option"), 0).sort(natcmp)
);
代码语言:javascript
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select name="models" id="models">
    <option value="14b">14b</option>
    <option value="ab">ab</option>
    <option value="14">14</option>
    <option value="bc">bc</option>
    <option value="15">15</option>
    <option value="101">101</option>
    <option value="13">13</option>
</select>

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61460640

复制
相关文章
使用 Python Selenium 提取动态生成下拉选项
在进行网络数据采集和数据分析时,处理动态生成的下拉菜单是一个常见的挑战。Selenium是一个强大的Python库,可以让你自动化浏览器操作,比如从动态生成的下拉菜单中选择选项。这是一个常见的网页爬虫和数据收集者面临的挑战,但是Selenium让它变得简单。
jackcode
2023/06/07
1.2K0
使用 Python Selenium 提取动态生成下拉选项
生成带下拉选项的excel(xls、xlsx)
原理:当我们需要生成带下拉框的excel,我们可以把需要下拉选择的数据放到sheet2,将sheet2的这些存放待绑定数据的单元格绑定到sheet1的需要下拉的单元格,而sheet2可以根据需求是否隐藏
用户9236851
2023/02/23
9860
关于WebDriver中下拉框选项操作 ---- >>Select类的使用:
在UI测试的过程中,我们经常会遇到对下拉框的处理, 笔者在日常的维护中, 对下拉框的处理的太多, 各种好定位的不好定位的, 这里可以分享两种定位方法:
呆呆
2021/05/18
1.2K0
jQuery练习——下拉菜单
实现效果:当鼠标移到不同的一级菜单,会显示相应的二级菜单,鼠标移走,二级菜单消失。
颜颜yan_
2022/12/01
27K0
jQuery练习——下拉菜单
JQuery中的select下拉框[通俗易懂]
2、设置text为dataTwo的项选中 $(“#SelectData”).find(“option[text=’dataTwo’]”).attr(“selected”,true);
全栈程序员站长
2022/09/07
6.5K0
vue3 实现 select 下拉选项
本人学生 🐶, 平时在外面没事接点小项目小赚一笔补贴生活费. 之前一直都是使用Vue2.x的版本做项目, 暑假刚刚学习了Vue3想着新项目就直接用Vue3上手. 效果展示 好了, 话不多说先给大佬们看看效果样式: 组件难点 因为下拉框可能会在某些情况下被挡住, 所以这里的下拉框被挂载到了body标签上, 并且下拉框中的选项往往是以<slot>插槽的形式编写, 这里就会困扰到很多小白, 搞不明白怎么样才能在 下拉框 与触发下拉按钮 之间关联响应式事件与数据. 组件的使用 <tk-select selec
玖柒的小窝
2021/10/22
4.8K0
vue3 实现 select 下拉选项
js下拉列表实现增加和移除选项
JaneYork
2023/10/11
2860
vue的select下拉框多选项-multiple属性
最近在使用vue-element-admin这个后台管理框架开源模板在做一个管理后台,使用起来其实还挺方便的,大部分的组件源码里面都已经写好了,用的时候只需要把源码拿出来修改修改,也就成了。
王小婷
2020/09/03
10.1K0
jQuery下拉菜单经典案例
jQuery下拉菜单经典案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <
红目香薰
2022/11/29
11.1K0
jQuery下拉菜单经典案例
jquery顶部固定层下拉导航
最近有人在论坛里讨论怎么制作导航菜单!我关注了一下,这里就写了一个简单的demo。供大家参考。代码如下:
业余草
2019/01/21
4K0
jquery顶部固定层下拉导航
删除所选项(附加搜索部分的jquery)
1.视图端(views)的配置为: <script> $(document).ready(function() { $("#info-grid").kendoGrid({ dataSource: { type: "json",
wfaceboss
2019/04/08
9490
向DropDownList 下拉框添加新选项[通俗易懂]
大家有没有遇见过这样的情况,假如有一个下拉框,现在让你在下拉框里面添加一个新的选项如“请选择”,而数据库里面又不存在这一选项》要怎么做,下面为大家推荐两种写法:
全栈程序员站长
2022/10/03
2.1K0
向DropDownList 下拉框添加新选项[通俗易懂]
javascript下拉菜单代码(用jquery做下拉菜单)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126047.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
11.4K0
javascript下拉菜单代码(用jquery做下拉菜单)
用jQuery模拟select下拉框
很多时候,美工会觉得默认的select下拉框很难看(特别是右侧的下拉箭头按钮),他们通常喜欢用一个自定义的图标来代替这个按钮。这样就只能用 js + div 来模拟了,倒腾了一番,用jQuery模拟了下,当然网上这种文章也不少,只是懒得去看找,又重新发明轮子鸟:)
菩提树下的杨过
2019/09/12
3.6K0
Selenium处理单选项下拉框列表
UI自动化测试中,经常会遇到下拉框列表选项,常见的下拉框列表有:单选项下拉框,多选项下拉框。
Altumn
2019/10/21
4.3K0
Selenium处理多选项下拉框列表
你穿过世事朝我走来 迈出的每一步都留下了一座空城 这时,一支从来世射出的毒箭命定了我 唯一的退路 --仓央嘉措
Altumn
2019/10/20
4.2K0
jQuery 选项卡插件 FengTab by FungLeo
好无聊啊,权当练手,写了一个选项卡插件 Html 结构 <h2>Demo 1</h2> <div id="FengTab" class="FengTab"> <ul class="tab"> <li>Title 1</li> <li>Title 2</li> <li>Title 3</li> <li>Title 4</li> </ul> <div c
FungLeo
2022/11/28
1.3K0
自定义下拉列表
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> body{ margin: 20px; } ul,li{ margin: 0px; padding: 0px; list-style: none; } #test1{ width: 300px; height: 40px; border: solid 1px darkred; line-height: 40px
前朝楚水
2018/04/02
1.9K0
自定义下拉列表
自定义下拉列表,也就是点击一个选择框的时候,下面会弹出相对应的推荐的选项,再选择一个之后,选项的内容会填充到选择框里面。选项框随之消失。
马克社区
2022/04/14
2.1K0
Java 导出Excel增加下拉框选项
excel对于下拉框较多选项的,需要使用隐藏工作簿来解决,使用函数取值来做选项 选项较少(一般少于5个): private static DataValidation setFewDataValidation(Sheet sheet, String[] textList, int firstRow, int endRow, int firstCol, int endCol) { DataValidationHelper helper = sheet.getDataValidationHelper()
星辰sea
2022/10/29
1.5K0

相似问题

使用jquery对多个选择下拉选项进行排序

32

排序下拉选项

36

我如何才能做到下拉排序选项?我想使用下拉排序选项进行排序。

14

使用jQuery禁用下拉选项

71

jQuery -在使用jQuery创建下拉时所选的下拉选项

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文