简体   繁体   中英

Selection of elements using nth-child 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> 

I need to select the 2nd (Back to Menu) button. So why nth-child(3) works but not nth-child(2)?

Since :nth-child(n) selects all children inside a parent element, regardless of what they are. So, in your case:

.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> 

What you need is actually :nth-of-type() selector.

 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> 

From JQuery's docs :

The :nth-child(n) pseudo-class is easily confused with :eq(n), even though the two can result in dramatically different matched elements. With :nth-child(n), all children are counted, regardless of what they are, and the specified element is selected only if it matches the selector attached to the pseudo-class. With :eq(n) only the selector attached to the pseudo-class is counted, not limited to children of any other element, and the (n+1)th one (n is 0-based) is selected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM