2010-07-26 44 views
5

根据jQuery文档,我需要转义出现在我的选择器字符串中的元字符,当它们以文字形式出现时。但是,我找不到很多具体的例子说明什么时候以及何时不逃避选择器。因此,何时何时不需要转义元字符,何时将它们解释为文字,请参阅:我什么时候需要转义metacharectars? (jQuery选择器)

属性选择器?即

$("[attr=value]") 

Id选择器?即

$("#id") 

类选择器?即

$(".class"); 

而且,有编写替换选择字符串metachars,同时仍保留了开始字符函数的方法吗?即:

// replace all meta chars, preserving the id selection? 
$("#id.rest$of*string") 

// replace all meta chars, preserving the attribute selection? 
// going back to my previous question, do I even need to escape the metachars in this situation? 
$("[attr=blah.dee#foo*yay]") 

我之所以问这个问题,是因为我正在与一个网站碰巧有一些真正讨厌的选择器。而且我无法控制网站,所以我不能改变选择器来更好地处理。

谢谢!

回答

3

从jQuery文档:

如果你希望使用任何的元字符(#; &,+ *〜':“^ $ => | /!)作为文字一个名字的一部分,必须转义字符以两个反斜杠...

所有这些必须进行转义:

  1. ID
  2. 类名
  3. 属性名称
  4. 属性值
  5. 元素名称

前四个是显而易见的,而这里的第五个例子。 XML中的元素名称可以包含“。”字符例如仍然是valid

<user.name>John Doe</user.name> 

如果你有选择的user.name所有元素,那么.必须比明目张胆地偷别人的答案被转义

$(xml).find("user\\.name"); 
0

相反,我会指出你吧:jQuery selector value escaping,其中jQuery的详细描述选择器解析方法。

简短回答:您可能会遇到麻烦,因为jQuery的选择器解析器不是100%的标准投诉。根据链接答案中的建议,您可以通过调用常规DOM方法(document.getElementById())来解决此问题,该方法将与有趣的选择器一起使用,然后将原始DOM元素传递给jQuery选择器。

$(document.getElementById("id.rest$of*string")); 
相关问题