2013-08-02 23 views
-1

我有一個字符串被修改了幾個string.replace('x','y'),這些替換的命令被複選框激活,並且我還沒有能夠自動取消選中其中一個複選框時自動取消該過程。我發現的唯一解決方案是在取消選中複選框時執行string.replace('y','x') ... 是否有任何其他方式更清潔?取消一個字符串。更換

+5

只要保持原始字符串從變換分開。 –

+0

對不起,你在問什麼?只需存儲原始字符串? –

+0

請向我們展示您的代碼。 – Bergi

回答

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

Woops,貼錯了小提琴;我編輯並把正確的一個。 – 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(); 
} 
相關問題