【问题标题】:When do I need to escape metacharectars? (jQuery Selectors)我什么时候需要转义元字符? (jQuery 选择器)
【发布时间】:2011-03-20 21:57:10
【问题描述】:

根据 jQuery 文档,当我的选择器字符串中出现的元字符作为文字出现时,我需要对它们进行转义。但是,我找不到很多关于何时以及何时不转义选择器的具体示例。所以什么时候什么时候不需要转义元字符,当它们被解释为文字时,在:

属性选择器?即

$("[attr=value]")

ID 选择器?即

$("#id")

类选择器?即

$(".class");

还有,有没有办法编写一个函数来替换选择器字符串中的元字符,同时仍然保留起始字符?即:

// 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]")

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

谢谢!!

【问题讨论】:

    标签: javascript jquery jquery-selectors escaping


    【解决方案1】:

    来自 jQuery 文档:

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

    所有这些都必须转义:

    1. 身份证
    2. 类名
    3. 属性名称
    4. 属性值
    5. 元素名称

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

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

    如果你必须选择user.name的所有元素,那么.必须被转义

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

    【讨论】:

      【解决方案2】:

      与其公然盗用别人的答案,我给你指点一下:jQuery selector value escaping,这里详细介绍了jQuery的选择器解析方法。

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

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

      【讨论】:

        猜你喜欢
        • 2011-10-17
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-21
        • 2018-02-25
        • 1970-01-01
        • 2010-12-22
        相关资源
        最近更新 更多