我正在使用jQuery切换功能来更改文本输入的某些字符。每次用户单击按钮时,输入值都会获得按钮的值(具有数字的|)。当用户再次单击该按钮时,脚本需要删除按钮的输入值字符。
例如,如果输入的值为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和| 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;
});
答案 0 :(得分: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