如何通过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']");