2012-06-22 38 views
1

我正在使用jQuery切換功能來更改文本輸入的某些字符。每次用戶點擊一個按鈕時,輸入值都會獲得按鈕的值(這是|帶數字的值)。當用戶再次點擊該按鈕時,腳本需要刪除輸入值的按鈕字符。例如,如果輸入值爲0 | 1 | 2 | 3 | 4 | 5,並且按鈕的值爲0 | 0 | 1 | 2 | 3 | 4 | 5,值,當用戶第一次點擊該按鈕時,輸入的值應該變爲1 | 2 | 3 | 4 | 5,但是當用戶第二次單擊該按鈕時,該值應該更改爲1 | 2 | 3 | 4 | 5 | 0。使用停止字符的Javascript中的正則表達式

我做到了,直到我注意到我的正則表達式並不準確。

看看這些chacarters:0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

有匹配正則表達式的兩個數:| 1和| 10

所以,我需要修復它,看看我的代碼:

$('.topmenu_permission').toggle(function(){ 
    var permission = $(this).attr('name'); 
    var valor = $('#userpermission').val(); 

    var pattern = permission, re = new RegExp(pattern, "g"); 

    valor = valor.replace(pattern, ''); 

    $('#userpermission').val(valor + '' + permission); 

    $(this).css({ 'background' : 'green', 'color' : 'white' }); 

    return false; 

}, function(){ 
    var permission = $(this).attr('name'); 
    var valor = $('#userpermission').val(); 

    var pattern = permission, re = new RegExp(pattern, "g"); 

    valor = valor.replace(pattern, ''); 

    $('#userpermission').val(valor); 

    $(this).css({ 'background' : '#ddd', 'color' : '#000' }); 

    return false; 
}); 

非常感謝你們,我轉換的字符串數組,現在它的工作得很好。

看看最終代碼:

$('.topmenu_permission').toggle(function(){ 
    var needle = $(this).attr('name').replace('|', ''); 
    var myString = $('#userpermission').val(); 
    myString = myString.split('|'); 
    var index = $.inArray(needle, myString); 
    if(index >= 0) 
    { 
     myString.splice(index,1); 
    } 
    myString = myString.join('|'); 
    myString = myString + '|' + needle; 
    $('#userpermission').val(myString); 
    $(this).css({ 'background' : 'green', 'color' : 'white', 'text-shadow' : 'none' }); 
    return false; 
}, function(){ 
    var needle = $(this).attr('name').replace('|', ''); 
    var myString = $('#userpermission').val(); 
    myString = myString.split('|'); 
    var index = $.inArray(needle, myString); 
    if(index >= 0) 
    { 
     myString.splice(index,1); 
    } 
    myString = myString.join('|'); 
    $('#userpermission').val(myString); 
    $(this).css({ 'background' : '#ddd', 'color' : '#000' }); 
    return false; 
}); 
+3

哪裏是你的模式? –

+1

@KevinB:它似乎*,在變量賦值之後,'pattern'等於'$(this).attr('name');'?返回的值。 –

+1

如果將該字符串拆分爲數組部分,它可能會更好/更穩定:''0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10'.split('|' ); // ['0','1','2','3'/ *等.. * /]' – sg3s

回答

1

的一種方法是將字符串臨時轉換到一個數組,用$.inArray()找到匹配,從陣列中刪除,該數組轉換回限定串。

這不涉及正則表達式,但它完成了工作。

var needle = "1"; 
var myString = "0|1|3|10|25"; 
var myNewString = myString; // the initial value of the result 
var myArray = myString.split("|"); 
var needleLocation = $.inArray(needle,myString); 
if (needleLocation >= 0) { 
    myNewString = myArray.splice(needleLocation,1).join("|"); 
} 
alert(myNewString); 

更多信息:http://api.jquery.com/jQuery.inArray/

也發現了這個,它可能會有所幫助:String manipulation - removing an element from a list

相關問題