如何通过id来选择html节点与jquery当id包含一个点?

如果我的html看起来像这样:

<td class="controlCell"> <input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" /> </td> 

我怎么能选择#SearchBag.CompanyName与JQuery? 我不能得到它的工作,我担心这是打破一切的点。 令人讨厌的是,重命名所有我的ID将是很多工作,更不用说可读性的损失。

注意:
请不要开始讨论如何放置桌子。 我非常了解CSS的价值和缺点,尽可能的努力使用它。

@Tomalak在评论:

由于ID选择符必须以散列号开头,所以这里不应该有歧义

“#id.class”是一个有效的选择器,它需要一个id和一个单独的类匹配; 这是有效的,并不总是完全多余的。

选择文字“。”的正确方法 在CSS中是为了逃避它:“#id \ .moreid”。 这曾经在一些旧的浏览器(特别是IE5.x)中引起麻烦,但所有现代桌面浏览器都支持它。

在jQuery 1.3.2中,同样的方法似乎工作,但我没有完全测试它; quickExpr没有选择它,但更多的选择器解析器似乎是正确的:

 $('#SearchBag\\.CompanyName'); 

一个变种是这样的:

 $("input[id='SearchBag.CompanyName']") 

在看到如此多的问题被重复标记为这个问题之后,拥有一个可靠的解决方案可能是有用的:

 $(document.getElementById('strange.id[]')) 

getElementById假定输入只是一个id属性,所以点不会被解释为类选择器。 另外,它比$('#strange\\.id\\[\\]')快,它将在内部调用getElementById

"foo.bar" :如果你有一个id = "foo.bar"的元素,你可以使用选择器$("#foo\\.bar")

更长的答案 :这是jQuery文档 – 部分选择器,你可以在这里找到的一部分: http : //api.jquery.com/category/selectors/

您的问题在文档的开始部分得到了解答:

如果你想使用任何元字符(如 
 !“#$%&'()* +,。/:;?@ [\] ^`{|}〜) 
作为一个名字的文字部分,你必须用字符逃避 
两个反斜杠:\\。 例如,如果你有一个id =“foo.bar”的元素, 
您可以使用选择器$(“#foo \\。bar”)。  W3C CSS规范包含 
有关有效CSS选择器的完整规则集。 也是有用的是 
由Mathias Bynens撰写的关于标识符的CSS字符转义序列的博客条目。

当你的ID在一个变量中时,attr选择似乎是合适的:

 var id_you_want='foo.bar'; $('[id="' + id_you_want + '"]'); 

这在jQuery选择器API中有记录 :

要使用任何元字符(如!"#$%&'()*+,./:;<=>?@[\]^`{|}~ )作为名称的文字部分,它必须用两个反斜杠转义:例如, id="foo.bar"的元素可以使用选择符$("#foo\\.bar")

总之,前缀.\\

 $('#SearchBag\\.CompanyName') 

问题是这样的. 将匹配一个类,所以$('#SearchBag.CompanyName')将匹配<div id="SearchBag" class="CompanyName"> 。 与\\.逃脱\\. 将被视为正常. 没有特别的意义,匹配你想要的ID。

这适用于所有的字符!"#$%&'()*+,./:;<=>?@[\]^`{|}~在jQuery中,

在寻找更通用的解决方案的人,我发现了一个解决方案,在任何特殊字符之前插入一个反斜杠,这解决了与从包含特殊字符的div检索名称和ID相关的问题。

“Str1.str2%str3”.replace(/ [^ \ w \ s] / gi,'\\ $&')

返回“Str1 \\。str2 \\%str3”

希望这是有用的!

您可以使用属性选择器:

 $("[id='SearchBag.CompanyName']"); 

或者你可以指定元素类型:

 $("input[id='SearchBag.CompanyName']");