取消string.replace

时间:2013-08-02 13:28:29

标签: javascript string replace

我有一个由多个string.replace('x','y')修改的字符串,这些替换命令由复选框激活,到目前为止,当取消选中其中一个复选框时,我无法自动反转该过程。我找到的唯一解决方案是在取消选中复选框时执行string.replace('y','x') ... 有没有其他更清洁的方式?

2 个答案:

答案 0 :(得分:0)

创建一个包含初始字符串值的数组。对阵列执行所有复选框操作。使用此数组获取最终输出字符串。

var array = ['Moe','Chuck','Larry']
function findItem(val){
 var index = array.indexOf(val);
if(index != -1){
 array[index] = val;
}
}
 function onSubmit(){
 return array.toString();
}

答案 1 :(得分:0)

首先,执行string.replace('x','y')然后执行string.replace('y','x')撤消它将无效。原因如下:

起始字符串:“zxyxz” string.replace('x','y')给你“zyyyz” string.replace('y','x')然后会给你“zxxxz”,这显然不是你开始的。

这是你想要的想法:

http://fiddle.jshell.net/XZE9v/1/

每次单击/取消选中复选框时,它都会重新应用规则。

如果你在这里看不到,那就是代码:

HTML:

<form id="myForm">
    <input type="text" id="originalText" />
    <br/>
    a|x<input type="checkbox" data-find="a" data-replace="x" onclick="updateRegex()" />
    <br/>
    b|y<input type="checkbox" data-find="b" data-replace="y" onclick="updateRegex()" />
    <br/>
    c|z<input type="checkbox" data-find="c" data-replace="z" onclick="updateRegex()" />
</form>
<br/>
<div id="display"></div>

JS:

function updateRegex() {
    var original = document.getElementById("originalText").value;

    var newString = original;

    var elems = document.getElementById("myForm").childNodes;

    for(var i=0; i<elems.length; i++)
    {
        if ( "checkbox" == elems[i].type && elems[i].checked)
        {
            var regexp = new RegExp(elems[i].getAttribute("data-find"), 'g');
            newString = newString.replace(regexp, elems[i].getAttribute("data-replace"));
        }
    }

    document.getElementById("display").innerHTML = newString;
}