jQuery中"*#id"与"#id"选择器的区别及差异场景
关于
$('#someId')和$('*#someId')的差异场景 绝大多数情况下这两个选择器的效果完全一致,但存在几个边缘场景会导致输出不同:
页面存在重复ID(违反HTML规范但实际常见)
jQuery的$('#someId')底层调用原生getElementById()方法,这个方法只会返回页面中第一个匹配该ID的元素。而$('*#someId')是通过CSS选择器引擎遍历所有元素,会把页面上所有带有该ID的元素全部找出——哪怕HTML规范明确要求ID必须唯一,但实际开发中常出现重复ID的情况(比如模板复用漏改ID、第三方代码冲突),这时候两者返回的元素集合就不一样。XML/带自定义命名空间的文档场景
如果是在XML文档,或者启用了自定义命名空间的HTML页面中,*作为通配符会匹配所有命名空间下的元素,而不带*的ID选择器可能仅匹配默认命名空间的元素。比如页面存在<ns:div id="someId">这类带命名空间的元素,$('#someId')可能无法找到目标,但$('*#someId')能成功匹配。jQuery早期版本的特定bug
在jQuery 1.x的部分早期版本中,$('#someId')在处理动态插入的DOM元素、或者某些特殊DOM结构时,可能出现无法找到元素的问题(比如元素尚未完全挂载到DOM树,或与特定插件存在冲突)。而$('*#someId')因为走的是CSS选择器查询路径,绕过了原生API的相关bug,从而能正常找到元素。不过这种场景现在几乎碰不到了,毕竟jQuery 1.x早已停止维护。
内容的提问来源于stack exchange,提问作者Vilx-
相关产品推荐
相关产品推荐

