当id包含点时,如何通过ID和jquery选择html节点?

Bor*_*ens 174 jquery

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

<td class="controlCell">
    <input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
Run Code Online (Sandbox Code Playgroud)

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

注意:
请不要开始讨论如何制作表格以进行布局.我非常清楚CSS价值和缺点,并尽可能地努力使用它.

bob*_*nce 210

@Tomalak在评论中:

因为ID选择器必须以hash#开头,所以这里不应该有歧义

"#id.class"是一个有效的选择器,它需要一个id和一个单独的类来匹配; 它是有效的,并不总是完全冗余.

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

同样的方法似乎在jQuery 1.3.2中有效,尽管我还没有彻底测试过它; quickExpr不会提取它,但更复杂的选择器解析器似乎正确:

$('#SearchBag\\.CompanyName');
Run Code Online (Sandbox Code Playgroud)

  • 我觉得@Tomalak的答案更优雅,比如:`````$`'`````'````'``````````````````````````````````````` (3认同)
  • @Tom:"#id.class"可能适用于使用相同样式表的多个文档,或者使用客户端脚本设置状态.例如"#navhome.navselected". (2认同)

Tom*_*lak 116

一个变体是这样的:

$("input[id='SearchBag.CompanyName']")
Run Code Online (Sandbox Code Playgroud)

  • 因为.CompanyName被视为类选择器. (9认同)
  • 在ID上使用类选择器可能很有用.想象一下,每个页面上都有一个#menu元素,但想要在其中一个页面上使其不同.#menu.hideme例如?边缘我知道,但它是有效的. (5认同)
  • 快速查看源代码,这是一个故意的设计决策或一个错误。用于标识ID选择器的正则表达式(名为quickExpr)不包含点作为有效字符。HTML规范但是允许它。 (2认同)
  • 这显然是最好的答案.也适用于这样的变量:$("tr [id ='"+ private_var +"']").css("background-color","#EEEEEE"); (2认同)

Ble*_*der 30

如果使用document.getElementById以下内容,则无需转义任何内容:

$(document.getElementById('strange.id[]'))
Run Code Online (Sandbox Code Playgroud)

getElementById 假设输入只是一个id属性,因此点不会被解释为类选择器.


one*_*ros 17

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

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

您的问题在文档开头就已得到解答:

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.

  • 你确实意识到这个问题已经超过三年了,文档可能不一样了,对吧? (4认同)

bis*_*hop 9

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

var id_you_want='foo.bar';
$('[id="' + id_you_want + '"]');
Run Code Online (Sandbox Code Playgroud)