字符串替换的数组仅适用于最后一个元素

时间:2015-05-09 12:24:12

标签: javascript jquery arrays

我有这段代码:

$(document).on('click','.submitMessage,.submitStdMessage', function(e){
    prevContent=$('textarea').val();
    alert(prevContent);
    variables = {
            '{nom}' : 'Manuel',
            '{apl}' : 'García',
            '{var1}' : 'chips',
            '{var2}' : 'deportes y aventura',
            '{var3}' : 'informática y tecnología',
            '{cst1}' : 'Serrano, 28',
            '{cst2}' : 'Plaza del carmen, 32',
            '{cst3}' : 'García Luna, 15'
        };

        $.each(variables, function (key, value) {
             newContent = prevContent.replace(key, value);
        });
        alert(newContent);
    });

当传递这样的字符串时:

  

{NOM} {VAR2} {CST2} {CST1} {CST3}

第一个警告说:

  

{NOM} {VAR2} {CST2} {CST1} {CST3}

第二个警告说:

  

{nom} {var2} {cst2} {cst1}GarcíaLuna,15

如果我更改variables数组中元素的顺序,它总是替换数组最后位置的变量集。我需要它来替换所有变量send。

2 个答案:

答案 0 :(得分:2)

替换通常适用于RegEx(您可以在此处查看更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace),因此如果您将字符串作为参数传递,它将只替换一个匹配。

你可以使用“mystring”.split(“wordToReplace”)。join(“whatToReplaceWith”);

答案 1 :(得分:1)

prevContent 永不改变。您需要更新它而不是另一个变量:

// Always declare local variables with var!!! 
var prevContent=$('textarea').val();
alert(prevContent);
var variables = {
        '{nom}' : 'Manuel',
        '{apl}' : 'García',
        '{var1}' : 'chips',
        '{var2}' : 'deportes y aventura',
        '{var3}' : 'informática y tecnología',
        '{cst1}' : 'Serrano, 28',
        '{cst2}' : 'Plaza del carmen, 32',
        '{cst3}' : 'García Luna, 15'
    };

    $.each(variables, function (key, value) {
         prevContent = prevContent.replace(key, value);
    });
    alert(prevContent);