循环使用jquery' s .each

时间:2014-07-09 16:41:45

标签: jquery truncate each

我有一串日期,我希望在第一个逗号处截断。 例如,我想:

  • 今天,2014年7月9日
  • 明天,2014年7月10日
  • 2014年7月11日

显示:

  • 今天
  • 明天
  • 7月11日

使用:

var longDay = $('.daily_forecast').text(); 
var shortDay = jQuery.trim(longDay).substring(0, 12).split(',').slice(0, -1);
$('.daily_forecast').replaceWith('<span>' + shortDay + '</span>');

会正确截断内容,但是,所有结果都会返回&#34;今天&#34;。

我相信我需要使用.each遍历这些元素,但我很难这样做。

谢谢。

2 个答案:

答案 0 :(得分:2)

将函数传递给.html()。它将在与选择器匹配的每个元素上调用,并接收旧内容作为参数。然后它可以返回替换。

$('.daily_forecast').html(function(index, longDay) {
    var shortDay = jQuery.trim(longDay).substring(0, 12).split(',').slice(0, -1);
    return '<span>' + shortDay + '</span>';
});

DEMO

如果原始元素包含HTML而不是纯文本,并且您需要在替换之前删除所有标记,则需要明确使用.each

$('.daily_forecast').each(function() {
    var longDay = $(this).text();
    var shortDay = jQuery.trim(longDay).substring(0, 12).split(',').slice(0, -1);
    $(this).html('<span>' + shortDay + '</span>');
});

您可能不想使用.replaceWith,因为这会删除整个.daily_forecast元素。使用.html()替换其内容。

答案 1 :(得分:0)

使用regEx

$('.daily_forecast').html(function(index, longDay) {
    var shortDay = jQuery.trim(longDay).match(/[\w\s]+(?=,)/)[0]
    return '<span>' + shortDay + '</span>';
});

fiddle