jQuery 选择器中星号的效果

Effect of an asterisk in a jQuery selector

提问人:Charles Anderson 提问时间:12/8/2017 最后编辑:Charles Anderson 更新时间:12/8/2017 访问量:2056

问:

在 Chrome(版本 63)的 DevTools 控制台中,我键入了以下内容:

enter image description here

请注意第二个查询中的额外星号。

两个查询都找到相同的元素,但第二个查询显然得到的结果略有不同。我也没想到星号是合法的。

有人可以解释一下星号有什么影响吗?

请注意,这不仅仅是询问查询中星号的使用情况,而是询问星号在紧挨着标识符时的效果。

jQuery的 jquery-selectors

评论

0赞 Nisarg Shah 12/8/2017
号 (*) 在 CSS 选择器中有什么作用的可能重复项?
1赞 Nisarg Shah 12/8/2017
基本上,它的意思是,这本身可能没有多大意义。但考虑一下,这意味着 。any element with ID = 'right'div#rightany div with ID = 'right'
0赞 Charles Anderson 12/8/2017
好的,我刚刚意识到第二个查询到底是什么:$('* #right')。由于缺少空格,我认为 *#right 是某种通配符。我会在几分钟内删除这个问题。
1赞 Nisarg Shah 12/8/2017
你确实知道 和 之间的区别,对吧?第一个在后代中搜索,第二个将 and 应用于同一元素。* #right*#right*#right
2赞 BoltClock 12/8/2017
我可以告诉你的是,jQuery将单独的ID选择器传递给document.getElementById(),而它将其他任何内容(与HTML不同)视为选择器。但我对 prevObject 属性的了解还不够,无法提供完整的答案。

答:

0赞 GreyRoofPigeon 12/8/2017 #1

星号代表任何元素。

#right并且都应该返回相同的元素,因为 ID 是唯一的。*#right

评论

1赞 BoltClock 12/8/2017
是的,这个问题也说了很多,但这不是要问的。仔细查看结果。请注意,第二个结果中存在 prevObject 属性。
1赞 GreyRoofPigeon 12/8/2017
我没有注意到,但你是对的。不过我会留下我的答案,所以其他人不会犯和我一样的错误...... :)
5赞 Charles Anderson 12/8/2017 #2

好的,多亏了上面的评论,我明白了发生了什么。

#right表示查找 ID 为“right”的元素。它永远不会返回多个元素。

*#rightmeans 查找 id 为 'right' 的任何元素,就像 means 查找具有该 ID 的任何 div 一样。如果具有该 ID 的元素多个,它将返回多个元素(不应该有,但 Chrome 至少允许您这样做。div#right

* #right表示查找 ID 为“right”的元素,该元素也是另一个元素的后代。如果具有该 id 的多个元素有多个,它还将返回多个元素。

尽管最后一种情况可能看起来是多余的,但如果“html”元素是唯一具有“right”的元素,则它不会匹配任何内容。

评论

0赞 PRMan 9/3/2021
我猜星号版本的效率要低得多。