Jquery 相邻同级选择器缺少第一个元素

Jquery 相邻同级选择器缺少第一个元素,jquery,jquery-selectors,Jquery,Jquery Selectors,鉴于此html: <div class="rating-system book-rating-27" title="Average rating: out of 5 (0 ratings)"> <a class="rating-star star-27 star-27-1 rating-star-edit" href="#" onclick="setStarRating(27, 1);return false;"><img src="images/star_empt

鉴于此html:

<div class="rating-system book-rating-27" title="Average rating: out of 5 (0 ratings)">
<a class="rating-star star-27 star-27-1 rating-star-edit" href="#" onclick="setStarRating(27, 1);return false;"><img src="images/star_empty.png"></a>
<a class="rating-star star-27 star-27-2 rating-star-edit" href="#" onclick="setStarRating(27, 2);return false;"><img src="images/star_empty.png"></a>
<a class="rating-star star-27 star-27-3 rating-star-edit" href="#" onclick="setStarRating(27, 3);return false;"><img src="images/star_empty.png"></a>
<a class="rating-star star-27 star-27-4 rating-star-edit" href="#" onclick="setStarRating(27, 4);return false;"><img src="images/star_empty.png"></a>
<a class="rating-star star-27 star-27-5 rating-star-edit" href="#" onclick="setStarRating(27, 5);return false;"><img src="images/star_empty.png"></a>
<input id="hidden_book_rating_27" name="book_rating" type="hidden" value="0"><br>
</div>


如果我使用jquery查找“rating star edit”类的元素,它会按预期返回所有5个元素:

然后,如果我再次选择“star-27”类的元素,它工作正常,返回所有5个元素(以及一些不同的非编辑元素):

但是,如果我使用相邻的同级选择器仅获取类“star-27”和“评级star edit”,出于某种原因,它将跳过第一个,只返回4:

谁能看出我错在哪里?这不是使用相邻同级选择器的正确方法,还是我的HTML在某个地方出错了


干杯。

它只返回4,因为第一个
star-27
不是任何元素的相邻sibling

sel1+sel2
选择器针对每个匹配的
sel2
元素,该元素直接跟在另一个匹配的
sel1
元素后面

它表示紧跟在
.A
s之后的所有
.B
s

CSS 2级规范说明:

相邻同级选择器具有以下语法:
E1+E2
,其中
E2
是选择器的主题。如果
E1
E2
在文档树中共享同一父级,并且
E1
紧随其后
E2
,忽略非元素节点(如文本节点和注释)

因此,第一个元素将不匹配,结果将是4个元素

要选择同时具有
.A
.B
类的元素,应改用
.A.B


在您的情况下:
.star-27.rating star edit

没有什么问题。得到4个元素是正确的,因为相邻表示下一个兄弟。发生的情况是,您要求“.star-27”的第一个出现,他有一个兄弟姐妹要上课“.rating star edit”,然后找到第一个并编写下一个兄弟姐妹。然后继续学习其他四个元素,依此类推。如果需要所有类,则应去掉“+”。

是否要查找同时具有这两个类的元素?如果是,则应为
.star-27。评级星形编辑