我正在尝试使用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包含我的多选项的名称。
答案 0 :(得分:1)
请勿在选项中使用空格或引号。(又说“请勿这样做”)相反,请考虑使用键(数字或简单文本)作为您的值选项。处理输入时,您可以将这些值映射到您真正需要的值。这样做也可以在某些时候保存您的HTML,防止您意外地输入关闭属性的字符,甚至是整个标记。
反转引号。 JavaScript可以使用''
或""
作为字符串。如果您无法绕过单引号,并且知道您不会在选项值中使用双引号,那么请替换它:
" option[value='"+ encodeURIComponent(subject) +"']"
用这个:
' option[value="'+ encodeURIComponent(subject) +'"]'
不要在将值放入HTML时对URI进行编码而是将值保留为纯文本,或者如果需要,请尝试对它们进行HTML编码。如果您需要URI编码(例如GET参数),那么URI会在表单提交时对它们进行编码,就像您准备将数据发送到其他地方一样。