【问题标题】:is this a valid id attributes ? if yes why can't javascript undersatand this这是一个有效的 id 属性吗?如果是,为什么 javascript 不能理解这个
【发布时间】:2017-06-04 02:04:31
【问题描述】:

出于某些安全目的,我想将元素的 id 设为OUR_MISSIONIDxcR/+dvmUOfaxP4M2eutUg==,为此我已经解密了一些字符串并将 aapend 附加到 id 。但如果我试图使用这个 id 来执行操作,javascript 会限制我这样做。

Uncaught Error: Syntax error, unrecognized expression: #OUR_MISSIONIDxcR/+dvmUOfaxP4M2eutUg==

但是在jsp页面中我做了这样的元素

<span id="#OUR_MISSIONIDxcR/+dvmUOfaxP4M2eutUg=="> </span>

【问题讨论】:

标签: javascript jquery jsp encryption


【解决方案1】:

在 HTML4 中有一些规则可以声明 'id':

  • 必须以字母 ([A-Za-z]) 开头,后跟任意数量的字母、数字 ([0-9])、连字符 ("-") 、下划线 ("_")、冒号 (":") 和句点 (".")。
  • HTML5 更加宽容,只是说一个 id 必须至少包含一个字符,并且不能包含任何空格字符。

某些浏览器可能支持在 ID 或名称标记中使用“#”,但我认为您应该避免使用某些字符,例如

  1. 期间
  2. 冒号
  3. #

因为它们在 CSS 选择器中具有特殊含义,所以您必须使用 CSS 中的反斜杠或传递给 jQuery 的选择器字符串中的双反斜杠来转义这些字符。

【讨论】:

    【解决方案2】:

    作为HTML4 documentation mentions,id 标记必须以字母([A-Za-z])开头,后跟任意数量的字母、数字([0-9])、连字符(“-” )、下划线 ("_")、冒号 (":") 和句点 (".")。因此,回答您的问题,不,这不是有效的 id 属性值。

    编辑:在HTML5 specification 它说它可以包含任何字符。但请注意,它还建议:“标识符是不透明的字符串。不应该从 id 属性的值派生特定含义。”因此,如果您关心安全性,请尝试另一种方式。

    【讨论】:

      【解决方案3】:

      您需要做的是转义非字母数字字符。

      使用任何元字符(例如 !"#$%&'()*+,./:;?@[\]^`{|}~ ) 作为名称的文字部分,它必须 用两个反斜杠转义:\\.例如,一个元素 id="foo.bar",可以使用选择器$("#foo\\.bar")。

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

      【讨论】:

        猜你喜欢
        • 2014-09-29
        • 1970-01-01
        • 2013-10-21
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多