使用nth-child选择器选择元素

时间:2018-03-04 06:01:02

标签: javascript jquery css css3 css-selectors

$(".sidebar>i:nth-child(3)").on("click", showMenu);
<div class="sidebar">
  <i class="fa fa-volume-up"></i>
	<div class="colorPalette">
	  <button class="submit">Submit</button>
		<p>Color Pallette:</p><br />
		<div class="colors_1">
			<span id="color1"></span>
			<span id="color2"></span>
			<span id="color3"></span>
		</div>
		<div class="colors_2">
		  <span id="color4"></span>
			<span id="color5"></span>
			<span id="color6"></span>
		</div>	
	</div>
	<i class="fa fa-arrow-circle-o-left" title="Back to Menu"></i>
</div>	

我需要选择第二个 (返回菜单)按钮。那么为什么nth-child(3)工作但不是nth-child(2)?

2 个答案:

答案 0 :(得分:3)

由于:nth-child(n)选择父元素内的所有子元素,因此无论它们是什么。所以,在你的情况下:

.sidebar>i:nth-child(3)
// This is the 3rd child, i tag

.sidebar>i:nth-child(2)
// This is the 2nd child, div tag

console.log($('.sidebar>i:nth-child(1)')[0])
console.log($('.sidebar>:nth-child(2)')[0])
console.log($('.sidebar>i:nth-child(2)')[0])
console.log($('.sidebar>i:nth-child(3)')[0])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sidebar">
  <i class="fa fa-volume-up"></i>
  <div class="colorPalette">Test</div>
  <i class="fa fa-arrow" title="Back to Menu"></i>
</div>

您需要的是:nth-of-type()选择器。

console.log($('.sidebar>i:nth-of-type(1)')[0])
console.log($('.sidebar>i:nth-of-type(2)')[0])
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="sidebar">
  <i class="fa fa-volume-up"></i>
  <div class="colorPalette">
    Test
  </div>
  <i class="fa fa-arrow" title="Back to Menu"></i>
</div>

答案 1 :(得分:2)

来自JQuery's docs

  

:nth-​​child(n)伪类很容易与:eq(n)混淆,即使这两者可能导致显着不同的匹配元素。使用:nth-​​child(n),所有子节点都被计数,无论它们是什么,只有在与附加到伪类的选择器匹配时才选择指定的元素。使用:eq(n)只计算附加到伪类的选择器,不限于任何其他元素的子元素,并且选择第(n + 1)个(n为0)。