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

Ale*_*lex 5 javascript jquery escaping jquery-selectors

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

属性选择器?即

$("[attr=value]")
Run Code Online (Sandbox Code Playgroud)

Id选择器?即

$("#id")
Run Code Online (Sandbox Code Playgroud)

班级选择器?即

$(".class");
Run Code Online (Sandbox Code Playgroud)

并且,有没有办法编写一个函数来替换选择器字符串中的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]")
Run Code Online (Sandbox Code Playgroud)

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

谢谢!!

Anu*_*rag 4

来自 jQuery 文档:

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

所有这些都必须转义:

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

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

<user.name>John Doe</user.name>
Run Code Online (Sandbox Code Playgroud)

如果您必须选择 的所有元素user.name,则.必须对其进行转义

$(xml).find("user\\.name");
Run Code Online (Sandbox Code Playgroud)