2015-05-09 160 views
1

工作,我有这样的代码:阵的字符串替换只有最后一个元素

$(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}加西亚红月,15

如果我更改variables数组内的元素的顺序,它总是替换数组最后位置上设置的变量。我需要它来代替发送的所有变量。

回答

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); 
+0

已解决。我会在7分钟内打勾。非常感谢。 – Biomehanika

2

一般更换正则表达式的作品(你可以在这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace查看详细信息),所以如果你传递字符串作为参数它将取代只是一场比赛。你可以使用“mystring”.split(“wordToReplace”)。join(“whatToReplaceWith”);

+0

这是一个好点 - 这些搜索模式将被解释为正则表达式。在这种情况下,OP模式可以正常工作,但如果其中包含类似“。”或“*”的内容,则会出现意想不到的结果。 – Pointy