JS / jQuery替换部分日期字符串不起作用

时间:2013-03-26 21:02:37

标签: javascript jquery

我有一个可见的表行,其中包含一个类为'time-col'的表格单元格。实际上我有多个,父行的可见性是动态的。

我试图用数字字符串(即3,4等)替换月份的三个字符串表示(即MAR,APR等)。

根据我的软弱思想,以下内容应该有效:

$('tr:visible .time-col').each(function() {
    // convert month string to numerical representation
    var monthStr = $(this).text().match(/[^\/]*/)[0];
    var months = { 'JAN': '1', 'FEB': '2','MAR': '3','APR': '4','MAY': '5','JUN': '6','JUL': '7','AUG': '8','SEP': '9','OCT': '10','NOV': '11','DEC': '12' };
    var month = months[monthStr];
    $(this).text( $(this).text().replace(monthStr, month) );
});

但是结果用'undefined'替换了正确的字符串。现在,如果我替换最后一行:

$(this).text( $(this).text().replace(monthStr, month) );

使用:

$(this).text(month);

我得到相应表格单元格中显示的正确数字(即3,4等)。

什么给Stack Overflow?¿

2 个答案:

答案 0 :(得分:2)

$(this).text()返回一个字符串。修改该字符串不会触及原始字符串。

要修改文本,请设置元素的文本:

var text = $(this).text();
$(this).text(text.replace(monthStr, month));

此外,带有字符串作为第一个参数的.replace()仅替换字符串的第一个实例。您必须使用正则表达式一次性替换所有事件。

答案 1 :(得分:0)

令人惊讶的是,我自己解决了这个问题。问题是,无论出于什么原因,JavaScript都没有像我预期的那样工作,并且它决定不在我的月份对象中提供我的数字字符串数据类型。

更改:

var month = months[monthStr]

为:

var month = months[monthStr].toString();

解决了这个问题!