用jQuery着色多选的某些选项的bug

时间:2013-01-04 14:30:55

标签: jquery css colors multi-select

我正在尝试使用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');
        }
    }
});

我目前在此代码中遇到两个问题:

1-第二个encodeURIComponent无法处理包含简单引号的选项。以下是控制台中的错误示例:

  

未捕获错误:语法错误,无法识别的表达式:

     

值= 'EST%20LE%20type%20d'action%20de']

我尝试修改发生这种情况的行,使其像第一个if子句中的行一样,但它没有改变任何内容。

2-我的jQuery代码没有为包含空格的选项着色。

如何解决这两个问题? 提前谢谢。

编辑:变量selectList包含我的多选项的名称。

1 个答案:

答案 0 :(得分:1)

请勿在选项中使用空格或引号。(又说“请勿这样做”)相反,请考虑使用键(数字或简单文本)作为您的值选项。处理输入时,您可以将这些值映射到您真正需要的值。这样做也可以在某些时候保存您的HTML,防止您意外地输入关闭属性的字符,甚至是整个标记。

反转引号。 JavaScript可以使用''""作为字符串。如果您无法绕过单引号,并且知道您不会在选项值中使用双引号,那么请替换它:

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

用这个:

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

不要在将值放入HTML时对URI进行编码而是将值保留为纯文本,或者如果需要,请尝试对它们进行HTML编码。如果您需要URI编码(例如GET参数),那么URI会在表单提交时对它们进行编码,就像您准备将数据发送到其他地方一样。