JQuery: 使用#[objectId]和[id=objectId]引用元素有什么区别?

4
有人能告诉我使用
#[objectId] 或者 [id=objectId] 引用元素有什么区别吗?

除了速度之外,它们没有任何区别。它们返回相同的内容。 - BenM
1
  1. 性能
  2. 可读性
- moonwave99
我在某些情况下使用 #objectID 时遇到了一些问题... - pestacio
1
如果在 #object 方面出现问题,那是因为您有多个具有相同 ID 的元素,这是无效的 HTML。 - Karl-André Gagnon
@user3301806 是什么问题?还有什么类型的ID? - Denys Séguret
1个回答

8
第一个很快,因为jQuery在识别模式(使用正则表达式)时内部使用getElementById
第二个要求jQuery迭代所有具有id的对象。这很慢。即使在这种情况下找到一个匹配项,jQuery也不会停止迭代。
唯一合理使用[id...选择器的原因是,当您不仅按确切的id搜索时,例如,您可能想要搜索所有以"something"开头的元素使用$('[id^=something]')
假设您有一个有效的HTML(没有重复使用的id)和一个有效的id,您仍然可能遇到$('#'+someId)的问题(例如,当您的id包含引号或破坏Sizzle的模式识别系统的任何内容时)。在这种情况下,请使用$(document.getElementById(someId))
根据您的评论:是的,在ID中使用"@"会使Sizzle(jQuery的选择器引擎)无法理解您的选择器。Sizzle使用以下正则表达式:
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,

/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/.test('#som@thing') 返回 false


dystroy:你最后一段说得很对!我的ID里有@符号。这可能是问题所在吗? - pestacio
感谢大家的回复! - pestacio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接