javascript - 无法从动态填充的字符串中 trim 尾随逗号

标签 javascript jquery html string checkbox

我正在尝试从用复选框值动态填充的段落中 trim 最后一个字符。问题是我必须 trim 整个段落的尾随字符。我不想在将其添加到值列表之前从值中删除它。

这是一个代码笔:

http://codepen.io/cavanflynn/pen/PqLwKJ

HTML:

<dl class="dropdown"> 

<dt>
<a href="#">
  <span class="hida">▼</span>     
</a>
</dt>

<dd>
    <div class="mutliSelect">
        <ul class="ul">
            <li>
                <input type="checkbox" value="PONumber" />Number</li>
            <li>
                <input type="checkbox" value="AuthNumber" />Auth Number</li>
            <li>
                <input type="checkbox" value="StatusId" />Status</li>
            <li>
                <input type="checkbox" value="ManufacturerId" />Manufacturer</li>
        </ul>
    </div>
</dd>
</dl>
<p class="multiSel"></p> 

Javascript:

$(".dropdown dt a").on('click', function () {
      $(".dropdown dd ul").slideToggle('fast');
  });

  $(".dropdown dd ul li a").on('click', function () {
      $(".dropdown dd ul").hide();
  });

  function getSelectedValue(id) {
       return $("#" + id).find("dt a span.value").html();
  }

  $(document).bind('click', function (e) {
      var $clicked = $(e.target);
      if (!$clicked.parents().hasClass("dropdown")) $(".dropdown dd ul").hide();
  });


  $('.mutliSelect input[type="checkbox"]').on('click', function () {

      var title = $(this).closest('.mutliSelect').find('input[type="checkbox"]').val(),
          title = $(this).val() + ",";

      if ($(this).is(':checked')) {
          var html = '<span title="' + title + '">' + title + '</span>';
          $('.multiSel').append(html);
      } 
      else {
          $('span[title="' + title + '"]').remove();
          var ret = $(".hida");
          $('.dropdown dt a').append(ret);

      }
  });

这里有很多关于 trim 尾随字符的问题,但我不知道如何在动态添加值后 trim 整个段落。谢谢!

最佳答案

下面的代码可以实现你想要的功能。我将逗号移到 <span> 之外

$('p.multiSel')
    .html($(this)
        .find('input[type="checkbox"]:checked')
        .map(function(idx, elem) {
            return $(elem).parent().text().trim();
        })
        .get()
        .map(function(text) {
            return "<span title='" + text + "'>" + text + "</span>";
        })
        .join(', '));

CodePen

说明

$('p.multiSel').html(...)

( .html ) 设置 <p class='multiSel'> 的内容.

$(this).find('input[type="checkbox"]:checked')

( .find ) 获取选中的复选框。

.map(...)

( .map ) 将选中的复选框数组映射到其纯文本,并 trim 掉空格。

.get()

( .get ) 将 jQuery 选择转换为常规数组。

.map(...)

( Array.prototype.map ) 通过将纯文本包装在 <span> 中,将纯文本映射到您想要创建的元素中标签和东西。

.join(...)

( Array.prototype.join ) 在我们正在处理的数组的所有元素之间插入逗号和空格。

关于javascript - 无法从动态填充的字符串中 trim 尾随逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31885251/

相关文章:

javascript - 为什么这个脚本不能在 Safari 或 Chrome 上运行?

html - 如何使用CSS设置页面图标

javascript - 如何使用 jQuery 和 Asp.Net MVC 3 实现提供额外动态生成字段的客户端注册表单?

JavaScript 无法用于滑动页面

javascript - 在javascript中的while循环中检查元素中的类

javascript - 动态生成内容的固定侧边栏的滚动

javascript - 如何动态阅读RSS

javascript - 使用输入值查找 <li> 中的精确文本

c# - 用户 session ID 作为 Ajax 调用中的参数

html - 介绍 HTML 和 CSS 无法在 div 中正确居中画廊标题