Nth-child not working as I expected

Nth-child not working as I expected
0

#1

Tell us what’s happening:
So I have managed to complete this task however I have a question. In my codebelow I have the line $(".well:nth-child(2)").addClass("animated bounce"); . Could somebody explain why this won’t select the second button in each of the ‘well’ classes.

Again just to clarify I have solved this task, however I feel like I don’t understand this function well enough to understand why the code I entered didn’t work when I was playing around with the function.

Thanks for your help.

Your code so far

<script>
  $(document).ready(function() {
    $("#target1").css("color", "red");
    $("#target1").prop("disabled", true);
    $("#target4").remove();
    $("#target2").appendTo("#right-well");
    $("#target5").clone().appendTo("#left-well");
    $("#target1").parent().css("background-color", "red");
    $("#right-well").children().css("color", "orange");
    $(".well:nth-child(2)").addClass("animated bounce");

  });
</script>

<!-- Only change code above this line. -->

<div class="container-fluid">
  <h3 class="text-primary text-center">jQuery Playground</h3>
  <div class="row">
    <div class="col-xs-6">
      <h4>#left-well</h4>
      <div class="well" id="left-well">
        <button class="btn btn-default target" id="target1">#target1</button>
        <button class="btn btn-default target" id="target2">#target2</button>
        <button class="btn btn-default target" id="target3">#target3</button>
      </div>
    </div>
    <div class="col-xs-6">
      <h4>#right-well</h4>
      <div class="well" id="right-well">
        <button class="btn btn-default target" id="target4">#target4</button>
        <button class="btn btn-default target" id="target5">#target5</button>
        <button class="btn btn-default target" id="target6">#target6</button>
      </div>
    </div>
  </div>
</div>

Your browser information:

Your Browser User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36.

Link to the challenge:


#2

The definition of nth-child selector is:

Selects all elements that are the nth-child of their parent.

So, in your example:

$(".well:nth-child(2)").addClass("animated bounce");

The above is selecting all the elements with class=“well” that are the 2nd child of their parent. The parents of both elements with class=“well” look like

<div class="col-xs-6">

When you have:

$(".target:nth-child(2)").addClass("animated bounce");

The above is selecting all the elements with class=“target” that are the 2nd child of their parent. There are two different parents of elements with class=“target” (see below):

<div class="well" id="left-well">

and

<div class="well" id="right-well">


#3

.well:nth-child(2) targets both the .wells because they are the second child of their parent.

    <div class="col-xs-6">
      <h4>#left-well</h4> <!-- this h4 is the first child of the div -->
      <div class="well" id="left-well"> <!-- this is the second -->
        <button class="btn btn-default target" id="target1">#target1</button>
        <button class="btn btn-default target" id="target2">#target2</button>
        <button class="btn btn-default target" id="target3">#target3</button>
      </div>
    </div>

:nth-child (and pseudo-classes in general) modify the selector to which they’re attached. In this case it’s attached to .well, so it’s what gets modified, not any children of .well.