You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Select2多选选中项文本去前缀-后用|拼接填充输入框问题

修复方案

你的问题出在each()方法的使用上:each()返回的是调用它的jQuery对象(也就是选中的option集合),而不是你在回调里return的字符串,所以直接把它赋值给myvalue,输入框肯定得不到想要的结果。

改用map()方法来处理:这个方法会遍历集合,把每个元素经过回调处理后的结果收集成新的jQuery对象,再用get()转成原生数组,最后用join('|')拼接成你要的格式。

修复后的JS代码:

(function($) {
  $(document).ready(function() {
    $('#elems').select2();
  });

  $('#elems').on('change', function() {
    // 用map收集处理后的文本,转数组后拼接
    var myvalue = $(this).find('option:selected').map(function() {
      // 去掉开头所有短横线
      return $(this).text().replace(/^[-]+/, '');
    }).get().join('|');

    $('#total').val(myvalue);
  })
})(jQuery);

关键说明:

  • map():遍历每个选中的option,回调里返回处理后的文本(去掉开头短横线)
  • get():把jQuery对象转换成原生字符串数组,比如["One", "Two"]
  • join('|'):把数组元素用竖线拼接成"One|Two"这样的字符串

完整可运行代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet"/>
<div>
  <input type="text" id="total">
</div>
<div>
  <select id="elems" name="elems[]" multiple>
    <option value="one">-One</option>
    <option value="two">--Two</option>
    <option value="three">---Three</option>
    <option value="four">----Four</option>
    <option value="five">-----Five</option>
    <option value="six">------Six</option>
    <option value="seven">-------Seven</option>
    <option value="eight">--------Eight</option>
  </select>
</div>

内容的提问来源于stack exchange,提问作者Faye D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:10:35