我什么时候需要逃脱metacharectars? (jQuery选择器)

根据jQuery文档,我需要转义在我的选择器字符串中出现的元字符,当它们作为文字出现时。 但是,我找不到很多关于何时何时不逃避选择器的具体例子。 因此,当我不需要转义元字符时,当它们被解释为文字时,在:

属性选择器? 即

$("[attr=value]") 

Id选择器? 即

 $("#id") 

class级选择器? 即

 $(".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]") 

我问这个问题的原因是因为我正在使用一个恰好有一些非常讨厌的选择器的网站。 而且我无法控制网站,因此我无法更改选择器以便更好地使用。

谢谢!!

来自jQuery文档:

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

所有这些必须被转义:

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

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

 John Doe 

如果必须选择user.name所有元素,那么. 必须逃脱

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

而不是公然窃取其他人的答案,我将指向你: jQuery选择器值转义 ,其中详细描述了jQuery的选择器解析方法。

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

 $(document.getElementById("id.rest$of*string"));