Why doesn't this jquery selector with a period

2019-01-14 21:40发布

I have a div with an ID

<div id="updates-pane-user.followed_on">

this jquery selector works

$("[id^='updates-pane']")

but this doesn't

$("#updates-pane-user.followed_on")

I don't see what is wrong.. id names can include periods right? Am I missing something obvious?

9条回答
在下西门庆
2楼-- · 2019-01-14 22:13

Because of the dot in the id attribute which in jQuery syntax represents class selector. This selector is equivalent to selecting node as:

<div id="updates-pane-user" class="followed_on">

查看更多
Melony?
3楼-- · 2019-01-14 22:15
做自己的国王
4楼-- · 2019-01-14 22:18

For sure period creating problem for JQuery to recognise the pattern.

jQuery has three type of selectors:

  1. "." selector means to select an element by class name.
  2. "#" selector means to select an element by ID.
  3. And Element selector that selects elements by their name(div, input etc.)

And you have confused jQuery engine with your naming convention of ID.

Its assuming that there is a div with id="updates-pane-user" and a applied class="followed_on". In such cases jQuery suggest to escape sequence using //. Below should be your syntex to select the element.

$("#updates-pane-user\\.followed_on");

Check it out this wrong fiddle and try to correct using // : http://jsfiddle.net/ukJ8Z/

Cheers!!

查看更多
我命由我不由天
5楼-- · 2019-01-14 22:19

Because . selector considers that there is a class with the following name

$("#updates-pane-user.followed_on")

means : find all elements with id = updates-pane-user which have class name followed_on

查看更多
老娘就宠你
6楼-- · 2019-01-14 22:19

You can also use the id attribute selector, like:

$('[id="updates-pane-user.followed_on"]')

because jQuery will treat the attribute as a string, rather than a jQuery class selector.

查看更多
我只想做你的唯一
7楼-- · 2019-01-14 22:23

In the latter selector, . is used to denote a class. So it's looking for the .followed_on class, which it obviously doesn't find and so nothing is matched.

In order to fix this, I think you should escape the dot with a double-backslash:

$("#updates-pane-user\\.followed_on")

According to the jQuery docs:

To use any of the meta-characters ( such as !"#$%&'()*+,./:;<=>?@[]^`{|}~ ) as a literal part of a name, it must be escaped with with two backslashes: \\. For example, an element with id="foo.bar", can use the selector $("#foo\\.bar").

In general, try not to use periods or other special characters in your IDs to avoid confusion all around. "Allowed" is not the same as "good practice."

查看更多
登录 后发表回答