【问题标题】:jquery selector doesnt accept pipe character |?jquery选择器不接受管道字符|?
【发布时间】:2012-09-06 18:30:33
【问题描述】:

我有一个要调用的 html ID。它有一个特定的名称,像这样name_|_anyting 但是当我尝试使用 Jquery 的选择器获取 elemetn 时出现错误

$("#name_|_anyting")

错误:语法错误,无法识别的表达式:|_anyting

所以我的问题是: jquery 选择器中不允许管道字符作为 Id 吗?

【问题讨论】:

标签: jquery jquery-selectors


【解决方案1】:

| 是选择器语法中的特殊字符,这意味着您不能直接在 ID 选择器中使用它。如果您无法更改标记中的 ID 以适应您的选择器,您将不得不转义选择器以诱使 jQuery 选择元素:

$("#name_\\|_anything")

【讨论】:

    【解决方案2】:

    管道字符“|”必须使用双反斜杠进行转义。

    选择器

    从 CSS 1-3 借用,然后添加自己的,jQuery 提供了一组强大的工具来匹配文档中的一组元素。

    如果您希望使用任何元字符(例如 !"#$%&'()*+,./:;?@[]^`{ |}~**** ) 作为名称的文字部分,您必须使用两个反斜杠转义字符:\\。例如,如果您有一个 id="foo.bar ",您可以使用选择器 $("#foo\\.bar")。W3C CSS 规范包含有关有效 CSS 选择器的完整规则集。同样有用的是 Mathias Bynens 关于标识符的 CSS 字符转义序列的博客条目.

    http://api.jquery.com/category/selectors/

    【讨论】:

    • 您的回答提到了双反斜杠 (\),但您的示例只有一个反斜杠:#foo\.bar...
    • @cale_b 他的双反斜杠被 * 吃掉了。他只是从 jQuery 选择器页面复制/粘贴了描述。
    【解决方案3】:

    要更新一个旧问题...在 jQuery 3.0 中,您现在可以使用 $.escapeSelector(selector)。例子:

    $('#' + $.escapeSelector('crazy|id.selector') + 'Wrapper').show();
    $('.' + $.escapeSelector(divClassVariable)).each(function() {...})
    

    和(来自文档)

    $( "div" ).find( "." + $.escapeSelector( ".box" ) );
    

    【讨论】:

      最近更新 更多