The value must not contain any space characters. HTML 4: ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").
The jQuery #id selector uses the id attribute of an HTML tag to find the specific element. An id should be unique within a page, so you should use the #id selector when you want to find a single, unique element.
Class Selector(“.”): The class selector selects HTML elements with a specific class attribute. It is used with a period character “.” (full stop symbol) followed by the class name.
The getElementById() method returns an element with a specified value. The getElementById() method returns null if the element does not exist. The getElementById() method is one of the most common methods in the HTML DOM. It is used almost every time you want to read or edit an HTML element.
@Tomalak in comments:
since ID selectors must be preceded by a hash #, there should be no ambiguity here
“#id.class” is a valid selector that requires both an id and a separate class to match; it's valid and not always totally redundant.
The correct way to select a literal ‘.’ in CSS is to escape it: “#id\.moreid”. This used to cause trouble in some older browsers (in particular IE5.x), but all modern desktop browsers support it.
The same method does seem to work in jQuery 1.3.2, though I haven't tested it thoroughly; quickExpr doesn't pick it up, but the more involved selector parser seems to get it right:
$('#SearchBag\\.CompanyName');
One variant would be this:
$("input[id='SearchBag.CompanyName']")
You don't need to escape anything if you use document.getElementById
:
$(document.getElementById('strange.id[]'))
getElementById
assumes the input is just an id attribute, so the dot won't be interpreted as a class selector.
Short Answer: If you have an element with id="foo.bar"
, you can use the selector $("#foo\\.bar")
Longer Answer: This is part of the jquery documentation - section selectors which you can find here: http://api.jquery.com/category/selectors/
Your question is answered right at the beginning of the documentation:
If you wish to use any of the meta-characters ( such as !"#$%&'()*+,./:;?@[\]^`{|}~ ) as a literal part of a name, you must escape the character with two backslashes: \\. For example, if you have an element with id="foo.bar", you can use the selector $("#foo\\.bar"). The W3C CSS specification contains the complete set of rules regarding valid CSS selectors. Also useful is the blog entry by Mathias Bynens on CSS character escape sequences for identifiers.
attr selection seems to be appropriate when your ID is in a variable:
var id_you_want='foo.bar';
$('[id="' + id_you_want + '"]');
This is documented in the jQuery selectors API:
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 withid="foo.bar"
, can use the selector$("#foo\\.bar")
.
In short, prefix the .
with \\
.
$('#SearchBag\\.CompanyName')
The problem is that .
will match a class, so $('#SearchBag.CompanyName')
would match <div id="SearchBag" class="CompanyName">
. The escaped with \\.
will be treated as a normal .
with no special significance, matching the ID you desire.
This applies to all the characters !"#$%&'()*+,./:;<=>?@[\]^`{|}~
which would otherwise have special significance as a selector in jQuery.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With