1

jQueryを使用して、複数選択リストのいくつかのオプションを塗りつぶしながら赤くしようとしています。これが私のコードです:

$.each(subjects, function(key, subject) 
{
    if (select.find('option[value=\"' + encodeURIComponent(subject) + '\"]').length === 0 && subject!="") 
    {
        //Ajouter la nouvelle catégorie dans la liste
        $('<option>', {
            value: subject,
            text: subject
        }).appendTo(select);
                 
        if (colored==true)
        {
            //Change color of options' text

            //$("option[value='"+subject+"']").css('color', 'red');
            $("#" + selectList + " option[value='"+ encodeURIComponent(subject) +"']").css('color', 'red');
        }
    }
});

現在、このコードには 2 つの問題があります。

1- 2 番目の encodeURIComponent は、単純な引用符を含むオプションを処理するために機能していません。コンソールのエラーの例を次に示します。

不明なエラー: 構文エラー、認識できない式:

value='est%20le%20type%20d'action%20de']

これが発生する行を最初の if 句のように変更しようとしましたが、何も変更されませんでした。

2- 私の jQuery コードは、スペースを含むオプションに色を付けません。

これらの問題の両方を解決するにはどうすればよいですか? 前もって感謝します。

編集: 変数 selectList には、複数選択の名前が含まれています。

4

1 に答える 1

1

オプションにスペースや引用符を使用しないでください。(別名 - 「そんなことはしないでください」) 代わりに、オプションの値にキー (数値または単純なテキスト) を使用することを検討してください。入力を処理すると、それらの値を本当に必要なものにマップできます。これを行うと、属性を閉じる文字やタグ全体を誤って挿入するのを防ぐことで、ある時点で HTML を保存することもできます。

引用符を反転します。JavaScript では、文字列に''または""を使用できます。一重引用符を回避できず、オプション値で二重引用符を使用しないことがわかっている場合は、これを置き換えます。

" option[value='"+ encodeURIComponent(subject) +"']"  

これとともに:

' option[value="'+ encodeURIComponent(subject) +'"]'

値を HTML に入れるときに URI エンコードしないでください。代わりに、値をそのままにしておくか、必要に応じて HTML エンコードを試してください。URI エンコード (GET パラメーターなど) が必要な場合は、データを別の場所に送信する準備ができているのと同じように、フォームの送信時にそれらを URI エンコードします。

于 2013-01-04T15:47:59.587 に答える