1

jQuery トグル関数を使用して、テキスト入力の一部の文字を変更しています。ユーザーがボタンをクリックするたびに、入力値はボタンの値を取得します (これは | と数字です)。ユーザーがボタンをもう一度クリックすると、スクリプトは入力値のボタンの文字を削除する必要があります。

たとえば、入力の値が 0|1|2|3|4|5 で、ボタンの値が 0| の場合 ユーザーが最初にボタンをクリックすると、入力の値は 1|2|3|4|5 に変更されますが、ユーザーがボタンを 2 回目にクリックすると、値は 1|2| に変更されます。 3|4|5|0。

私の正規表現がそれほど正確ではないことに気付くまで、私はそれを行いました。

これらの文字を見てみましょう: 0|1|2|3|4|5|6|7|8|9|10

|1 と |10 の正規表現に一致する 2 つの数値があります。

だから、私はそれを修正する必要があります、私のコードを見てください:

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

1 に答える 1

1

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/

これも役立つかもしれません:文字列操作 - リストから要素を削除する

于 2012-06-22T19:33:38.327 に答える