我有一个有一些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。
答案 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 class
y in HTML5”。
只要您知道自己在做什么,就可以非常安全地在id
或class
属性的值中使用奇怪的字符。
答案 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.');
答案 4 :(得分:0)
它可能正在做类似的to this。我建议只需将64'n字符串放入div中,然后将base64名称用于所有内容。或者行ID,通用的,你可以随时预测结果。
答案 5 :(得分:0)
您应该遵循ID命名规则: