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

我目前对这段代码有两个问题:

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

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

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

我尝试修改发生这种情况的行,使其类似于第一个 if 子句中的行,但它没有改变任何东西。

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

我怎样才能解决这两个问题?先感谢您。

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

4

1 回答 1

1

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

颠倒你的报价。JavaScript 可以将''or""用于字符串。如果您无法避免使用单引号,并且知道您不会在选项值中使用双引号,则将其替换为:

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

有了这个:

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

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

于 2013-01-04T15:47:59.587 回答