无法替换字符串

时间:2016-12-13 11:25:12

标签: javascript arrays string

我对字符串替换有一些问题,特别是我有一个返回数组的php,每个数组索引都包含一个特定的翻译字符串。基本上,这个数组保存在GlobalVariables.language['hello_world']里面,例如返回Hello world

现在我有一个包含这个翻译字符串的数组索引:

wait $seconds seconds before try again

我将秒数设置在一个作为倒计时的间隔函数中:

setInterval(function ()
    {
        minutes = parseInt(timer / 60, 10);
        seconds = parseInt(timer % 60, 10);

        minutes = minutes < 10 ? "0" + minutes : minutes;
        seconds = seconds < 10 ? "0" + seconds : seconds;

        text = text.replace('$seconds', seconds);
        console.log(text);

        $('.alert').text(text);

        if (--timer < 0)
        {
            timer = 0; //Stoppo il timer
        }
    }, 1000);

这将返回如下字符串:

wait 20 seconds before try again

但只是第一次,'因为后来字符串的$ seconds部分已被替换,我虽然只替换第二次计时的数字文本数量,但我不能这样做'因为在调用setInterval之前我将该字符串附加到包含数字编号的另一个字符串。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

不要替换原始变量,而是使用不同的变量。

public void showFileChooser() { Intent imageDownload = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); imageDownload.putExtra("crop", "true"); imageDownload.putExtra("aspectX", 4); imageDownload.putExtra("aspectY", 3); imageDownload.putExtra("outputX", 800); imageDownload.putExtra("outputY", 600); imageDownload.putExtra("return-data", true); startActivityForResult(imageDownload, 2); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 2 && resultCode == RESULT_OK && null != data) { Bundle extras = data.getExtras(); bitmap1 = extras.getParcelable("data"); imageView1.setImageBitmap(bitmap1); } } 将始终包含text: -

$seconds

答案 1 :(得分:1)

首次在字符串中找到$seconds。但是下一次(第二次迭代)因$seconds中不存在text,因此不会被替换。

您应该使用元素保留原始内容并将其用作模板。

//Perists original text with element
var alertElem = $('.alert');
alertElem.data('text', text);

setInterval(function (){
    minutes = parseInt(timer / 60, 10);
    seconds = parseInt(timer % 60, 10);

    minutes = minutes < 10 ? "0" + minutes : minutes;
    seconds = seconds < 10 ? "0" + seconds : seconds;

    alertElem.text(function(){
        return alertElem.data('text').replace('$seconds', seconds)
    });

    if (--timer < 0)
    {
        timer = 0; 
    }
}, 1000);