【问题标题】:jQuery: escaping plus sign in selectorjQuery:转义加号选择器
【发布时间】:2011-05-24 19:14:22
【问题描述】:

给定一个 dom 元素:

<li id="foo+bar"></li>

我想解决那个元素(如果可能,使用 jQuery)并尝试:

$("#foo+bar")

我也尝试过逃避它:

$("#foo\+bar")

..但似乎都不起作用,因为(我猜)jQuery 无法处理它看起来的加号。不幸的是,我真的没有更改 id 值的选项,所以:

有没有办法让 jQuery 获得正确的 dom,或者我该如何解决这个问题?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

尝试用两个反斜杠转义它。

$("#foo\\+bar")

【讨论】:

  • 工作正常,谢谢.. 是的,Matt Ball,它在 jQuery 常见问题解答中我看到了,抱歉我没有先找到它。
  • 请记住,虽然 escape 代码在常见问题解答中,但它并不是专门指向您的 +,但它(有点明确!)引用到实际有效的 ID 问题,例如 :.
【解决方案2】:

嗯,问题可能是+ 不应该在那里。

HTML 4 specification 说:

ID 和 NAME 标记必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 (" _")、冒号 (":") 和句点 (".")。

因此,任何解决方法仍然基于错误的启动,因此可能随时停止工作。你真的应该改变那个id。

【讨论】:

  • 在 HTML5 中没问题。对于 jQuery 选择器,stackoverflow.com/questions/6115636/…
  • 可能是这样,所以在只有 HTML5 的情况下会很酷。由于 HTML5 虽然被广泛用于娱乐,但据我所知还不是一个完整的规范,我建议不要为此编写代码。
  • 但我的观点是,任何解决方案都在与不应该存在的东西作斗争:经验告诉我,这意味着在未来的某个地方你的代码会随机中断,因为某些东西(jquery、浏览器、无论如何)已停止支持您的解决方法。就我而言,你所做的任何事情(没有尝试过,@ole_melhus 的双重转义可能有效)都是危险的。
【解决方案3】:

我不相信 + 是 id 中的有效字符。

ID 和 NAME 令牌必须以 字母 ([A-Za-z]) 并且可以跟随 由任意数量的字母、数字 ([0-9])、连字符 ("-")、下划线 ("_")、冒号 (":") 和句点 (".")。

http://www.w3.org/TR/html401/types.html#type-name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 2014-10-22
    • 2012-01-14
    • 2011-10-21
    • 1970-01-01
    • 2011-07-11
    • 2015-05-03
    相关资源
    最近更新 更多