2012-06-22 1 views
1

jQuery 토글 기능을 사용하여 텍스트 입력의 일부 문자를 변경하고 있습니다. 사용자가 버튼을 누를 때마다 입력 값은 단추 값 (숫자가있는)을 가져옵니다. 사용자가 버튼을 다시 클릭하면 스크립트는 입력 값의 버튼 문자를 제거해야합니다.Javascript에서 정지 문자가있는 정규 표현식

예를 들어 입력 값이 0 | 1 | 2 | 3 | 4 | 5이고 버튼의 값이 0 | 사용자가 처음 버튼을 클릭 할 때 입력 값은 1 | 2 | 3 | 4 | 5로 변경되어야하지만 사용자가 두 번째 버튼을 클릭하면 값이 1 | 2 |로 변경됩니다. 3 | 4 | 5 | 0.

내 정규 표현식이 정확하지 않은 것으로 나타 날 때까지 완벽하게 작동했습니다.

이 chacarters를 살펴 보자 : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10

정규 표현식과 일치하는 두 개의 숫자가 있습니다 | 1가 |

$('.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; 
}); 

내가 배열에 문자열을 변환하고 지금은 완벽하게 작동하고, 당신이 아주 많이들 감사 : 10

그래서, 난 내 코드를 보면 그것을 해결하기 위해 필요합니다. 마지막 코드에서

봐 :

$('.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 ('|'); – 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