2013-08-02 4 views
-1

У меня есть строка, которая была изменена несколькими string.replace('x','y'), а те, которые заменяют команды, активируются с помощью флажков, и я пока не смог автоматически изменить процесс, когда один из флажков снят. Единственное решение, которое я нашел, - сделать string.replace('y','x'), когда флажок снят ... Есть ли другой способ, который был бы чище?Отмените string.replace

+5

Просто держать исходную строку отдельно от преобразования. –

+0

Извините, но что вы спрашиваете? Просто сохраните исходную строку? –

+0

Пожалуйста, покажите нам свой код. – Bergi

ответ

0

Во-первых, делать string.replace ('х', 'у'), а затем string.replace ('у', 'х'), чтобы отменить это не будет работать. Вот почему:

начиная строка: "zxyxz" string.replace ('х', 'у') дает вам "zyyyz" string.replace ('у', 'х'), то даст вам «zxxxz », что явно не то, с чего вы начали.

Вот скрипку с тем, что вы хотите, я думаю:

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

Он будет повторно применять правила каждый раз, когда флажок щелкнули/unclicked.

В случае, если вы не можете увидеть его здесь код:

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

Вордс, отправил неправильную скрипку; Я отредактировал и установил правильный. – Lebowski156

+0

Ну, это в значительной степени то, что я сделал, я просто запускаю оригинал по правилам каждый раз, когда флажок установлен и снят флажок .... Большое спасибо за быстрый ответ! – Lou

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(); 
} 
Смежные вопросы