jQuery中$(.some-class:#some-hash)语法的具体含义是什么?
关于jQuery选择器的疑问解答
1. jQuery扩展选择器的合法性
你的判断完全正确:jQuery选择器在完整支持标准CSS选择器的基础上,额外扩展了大量独有的选择器语法,你提到的:eq()就是典型的jQuery专属选择器,类似的还有:first、:last、:contains()、:has()等,这些选择器都不属于CSS官方规范,仅能在jQuery的选择器调用中使用,无法直接写在CSS样式表中生效。
2. 示例中冒号的作用和语法说明
你对index方法的作用猜测是对的:这段代码就是要从所有类为tabPage的元素里,找到ID等于hash+tabPostFix(需要先去掉location.hash自带的前缀#)的元素,再获取它在同类元素中的序号,后续用这个序号选中对应位置的tab元素。
你疑惑的.tabPage后面的冒号,其实属于这段代码的不严谨冗余写法。正常来说,要选中同时满足「类为tabPage、ID为指定值」的元素,标准选择器写法是.tabPage#指定ID,不需要加冒号。这里的冒号属于多余内容,只是因为jQuery的选择器解析引擎对这种无效符号有容错处理,才没有导致功能报错,实际运行时还是会按照「类为tabPage且ID为对应值」的规则匹配元素。
这种带冗余冒号的写法不推荐使用,更稳妥的写法是先把location.hash的前缀#去除,再拼接成标准选择器:
// 先去掉hash的#前缀 const pureHash = hash.replace('#', '') const targetTabPage = $(`.tabPage#${pureHash}${tabPostFix}`) const idx = $('.tabPage').index(targetTabPage)
内容的提问来源于stack exchange,提问作者Enlico
相关产品推荐
相关产品推荐

