我有一个带ID的div
<div id="updates-pane-user.followed_on">
这个jquery选择器工作
$("[id^='updates-pane']")
但这不是
$("#updates-pane-user.followed_on")
我看不出有什么问题。身份证名称可以包括句号吗?我错过了一些明显的东西吗?
答案 0 :(得分:31)
在后一个选择器中,.
用于表示一个类。所以它正在寻找.followed_on
类,它显然没有找到,因此没有匹配。
为了解决这个问题,我认为你应该用双反斜杠来逃避点:
$("#updates-pane-user\\.followed_on")
根据jQuery docs:
使用任何元字符(例如!“#$%&amp;'()* +,。/:;&lt; =&gt;?@ [] ^`{|}〜)作为文字作为名称的一部分,必须使用两个反斜杠进行转义:\\。例如,id =“foo.bar”的元素可以使用选择器$(“#foo \\。bar”)。
一般情况下,请尝试不在ID中使用句点或其他特殊字符,以避免混淆。 “允许”与“良好做法”不同。
答案 1 :(得分:4)
是的,HTML5允许使用id的句点,但j3不是由w3 org构建的。它只是针对最常见情况进行了优化的实用程序库。
如果您的ID有一个句点或任何其他字符使jQuery解析它不仅仅是一个id,那么您最好使用标准函数:
$(document.getElementById(yourId))
如果您的ID来自变量,则这是首选解决方案。
答案 2 :(得分:4)
$("#updates-pane-user\\.followed_on")
- 这应该按照Jquery documentation
// Does not work
$("#some:id")
// Works!
$("#some\\:id")
// Does not work
$("#some.id")
// Works!
$("#some\\.id")
答案 3 :(得分:3)
由于id
属性中的点,jQuery语法中的点表示类选择器。
此选择器相当于选择节点:
<div id="updates-pane-user" class="followed_on">
答案 4 :(得分:2)
因为.
选择器认为存在具有以下名称的类
$("#updates-pane-user.followed_on")
表示:查找ID = updates-pane-user
且类名为followed_on
答案 5 :(得分:2)
用它来逃避你的点:
$("#updates-pane-user\\.followed_on")
答案 6 :(得分:2)
为JQuery识别模式的确定期间创建问题。
jQuery有三种选择器:
"."
选择器表示按类名选择元素。"#"
选择器表示按ID选择元素。div
,input
等)您已将jQuery engine
与ID的命名约定混为一谈。
假设有一个div为id="updates-pane-user"
且已应用class="followed_on"
。在这种情况下,jQuery
建议使用//
转义序列。下面应该是你的syntex来选择元素。
$("#updates-pane-user\\.followed_on");
检查出这个错误的小提琴并尝试使用//
进行更正:http://jsfiddle.net/ukJ8Z/
干杯!!
答案 7 :(得分:1)
是的Jimbo答案是正确的,但你仍然可以使用\\
$("#updates-pane-user\\.followed_on")
逃避两(2)个反斜杠。
点击link查看How do I select an element by an ID that has characters used in CSS notation?
答案 8 :(得分:0)
您还可以使用id属性选择器,例如:
$('[id="updates-pane-user.followed_on"]')
因为jQuery会将该属性视为字符串,而不是jQuery类选择器。