返回多个替换

时间:2016-12-21 16:29:07

标签: javascript jquery

我需要在客户端替换多个不同的文本字符串。

让我们说我想取代" Red Apple"用"橘子橙"和#34;悲伤的猫"和#34;快乐狗"。

我一直试图扩展this question来处理多个替换。

$("#container h3 a").text(function () {
  return $(this).text().replace("Red Apple", "Orange Orange"); 
  return $(this).text().replace("Sad Cat", "Happy Dog");
});

我发现只返回了第一个替代品。

我无法弄清楚如何返回倍数,也没有得到这样的预期结果。

return {
  ...
}

这不是a duplicate的理由:请注意,我不是要替换苹果而是替换猫。

3 个答案:

答案 0 :(得分:4)

您的第一个return结束了该功能。第二个return永远不会到达。

但你可以链接替换。

$("#container h3 a").text(function () {
    return $(this).text().replace("Red Apple", "Orange Orange").replace("Sad Cat", "Happy Dog");
});

答案 1 :(得分:1)

一旦您的代码到达return语句,之后就不会处理任何代码。 return从字面上将控制权返回给调用者代码。

MDN states

  

return语句结束函数执行并指定值   返回函数调用者。

您可以通过以下几种方式处理此类问题:

  1. 您可以构建一个值,然后返回该值:

    $("#container h3 a").text(function () {
    
      // Work on your return value as much as you want
      var retVal = $(this).text();
      retVal = retVal.replace("Red Apple", "Orange Orange");
      retVal = retVal.replace("Sad Cat", "Happy Dog");
    
      return retVal;  // And then return it (just once)
    });
    

    请注意,此方法绝对没有任何问题,因为它易于阅读和理解。

  2. 或者,在这种情况下,您可以链接.replace()来电,因为每次调用.replace()时,它都会返回一个新字符串,然后您可以调用.replace()。最终字符串将作为原始return实际发回的值返回:

    $("#container h3 a").text(function () {
      return $(this).text().replace("Red Apple", "Orange Orange")
               .replace("Sad Cat", "Happy Dog");
    });
    

    请注意,这种方法完全相同,但它更紧​​凑,更精确,无需临时存储变量。

答案 2 :(得分:1)

我认为你应该可以通过在一个return语句中调用replace两次来完成它。

return $(this).text().replace("Red Apple", "Orange Orange").replace("Sad Cat", "Happy Dog");