TomSelect初始化后如何重排HTML来源的<option>选项?
可以直接通过sortField访问原始HTML元素实现排序
完全可以做到,TomSelect在处理原生<option>生成的内部选项对象时,会自动给每个选项绑定$element属性,指向对应的原始DOM元素。你只需要在sortField函数里通过这个属性读取<option>的dataset值,就能基于自定义的data属性排序,步骤如下:
初始化时配置sortField
初始化TomSelect时,把sortField定义为一个自定义排序函数,函数参数里的选项对象可以通过$element拿到原始<option>:const ts = new TomSelect('#your-select', { sortField: (a, b) => { // 读取option的data-order属性,默认值设为0避免NaN const orderA = parseInt(a.$element.dataset.order) || 0; const orderB = parseInt(b.$element.dataset.order) || 0; // 升序排列,要降序就返回 orderB - orderA return orderA - orderB; } });修改排序时直接更新原始元素的data属性
后续需要调整排序时,直接修改对应<option>的data-order值,然后调用refreshOptions()触发重新排序即可:// 示例:把value为"option1"的选项排序值设为1 document.querySelector('#your-select option[value="option1"]').dataset.order = 1; // 触发TomSelect重新排序并刷新选项列表 ts.refreshOptions();
这个方法比你之前的两种方案更简洁:不用销毁重建组件,也不用手动遍历修改内部选项的$order属性,完全基于原始HTML元素的data属性来控制排序逻辑,维护起来更直观。
内容的提问来源于stack exchange,提问作者unhammer
相关产品推荐
相关产品推荐

