jquery中的特殊字符

时间:2011-11-12 22:34:01

标签: javascript jquery escaping

我有一个div列表,每个都有一个id。该ID也作为链接执行:"http://en.wikipedia.org/wiki/" + id是维基百科上此项目的链接,"/image/" + id + ".jpg"是此项目的本地图片。

但我有一些特殊字符的id。有两种类型(我发现有bug):第一种是A_(B),包含括号,第二种A%C3%A9B(AéB),包含特殊字母。我知道()可以替换为%28%29,因此它基本上只有一种类型。我已经测试过,这种名称适用于图像和维基链接。

问题是,当我使用jQuery时,$('#' + id)无法找到带有特殊字母的对象。任何人都知道如何处理它?<​​/ p>

4 个答案:

答案 0 :(得分:2)

如果您查看selectors页面的第二段,则会显示这些字符!"#$%&'()*+,./:;<=>?@[\]^``{|}~在使用时需要进行转义。

但是如果你包括其他角色,最好使用他们的转义码来包含它们(google closure compiler会自动为你做这个)。因此,此é字母可以替换为\u00e9

答案 1 :(得分:1)

你试过了吗?

var id = encodeURIComponent(id);
$('#' + id);

看它能否解决它?

答案 2 :(得分:0)

有关详细信息,请参阅this SO question

就个人而言,我认为ID应该符合人类可读,易于理解的ID。考虑使用不同的机制附加URL,例如jQuery&#39; $.data,或其他没有效力限制的属性。

答案 3 :(得分:0)

一个好的经验法则是首先符合相关规范。根据{{​​3}}:

  

ID和NAME令牌必须以字母([A-Za-z])开头,可能是   后跟任意数量的字母,数字([0-9]),连字符(“ - ”),   下划线(“_”),冒号(“:”)和句点(“。”)。

因此,元素ID或名称中不允许使用(,)和%等字符。

id中的不符合字符可能会导致jQuery以外的问题。使用 encodeURIComponent (例如替换(使用%28)也无济于事,因为也不允许使用%字符。但是你可以使用字符实体来处理典型的az,AZ范围之外的字母,或者你可以使用普通的 document.getElementById ,如果你真的需要使用jQuery:

$(document.getElementById(id))

可能就足够了(但不可靠)。