登录div名称时出现问题

时间:2011-03-28 08:04:07

标签: javascript jquery

我有一个有一些div的页面。每个div id都以divfor开头,之后有一个后缀。像divforjohn,divforjim ......等。这些后缀来自数据库。

我的问题是,当我尝试在该div中加载某些内容时,如果它中包含@符号则会产生问题。所以,如果我做了类似下面的事情:

 $("#divfor"+divsuffix).html('some text goes here.');

如果divname为divforjohn则不会产生任何问题,但如果divname为divforjohn@x则不起作用。

那么,我怎样才能解决其id中包含@sign的div?或者它是jquery的限制/ bug?

THX。

6 个答案:

答案 0 :(得分:2)

要在JavaScript中使用id="divforjohn@x"定位元素(通过document.querySelectorAll或通过jQuery / Sizzle),您需要转义@,如下所示:

$('#divforjohn\\@x')

演示:http://jsfiddle.net/mathias/nafmt/

此外,接受的答案是错误的 - 它说明了HTML 4规范中包含的ID命名规则。问题是,浏览器从未实现过这个,因此在HTML5中,这些规则不再具有限制性。请参阅“The id attribute just got more classy in HTML5”

只要您知道自己在做什么,就可以非常安全地在idclass属性的值中使用奇怪的字符。

答案 1 :(得分:1)

<强>更新 正如评论中所提到的那样,当你的唯一目的是支持HTML5浏览器时,所有意味着使用任何唯一的ID和属性至少包含1个字符。

See this Stackoverflow thread for further discussion.


嗨,我希望本文的这一部分对您有用

6 Basic HTML data types - IDs and Names

这不是jquery / javascript等的错误。

您当然可以查看更正式的HTML4 RFC

你有什么理由必须在元素的id 中包含 @吗?

我建议你应该尽量避免使用它,因为一些旨在支持html4的传统浏览器可能没有以这种方式实现它,因为

答案 2 :(得分:1)

实际上你的ID不能包含@,正如@Peter描述的那样,一旦你改变了你的身份,那么你可以像这样使用

jQuery有正则表达式选择器:

http://james.padolsey.com/javascript/regex-selector-for-jquery/

就像这样使用:

 $(':regex(id,/^divfor.*/)');

答案 3 :(得分:1)

此代码有效:

var d = document.getElementById("divforjohn@x");
$(d).html('some text goes here.');

jsFiddle example

答案 4 :(得分:0)

它可能正在做类似的to this。我建议只需将64'n字符串放入div中,然后将base64名称用于所有内容。或者行ID,通用的,你可以随时预测结果。

答案 5 :(得分:0)

您应该遵循ID命名规则:

  • 必须以字母A-Z或a-z
  • 开头
  • 可以跟着:字母(A-Za-z), 数字(0-9),连字符(“ - ”), 下划线(“_”),冒号(“:”)和 句号(“。”)
  • 值区分大小写