Target a Specific Child of an Element Using jQuery - Why 2nd target of both wells?

Target a Specific Child of an Element Using jQuery - Why 2nd target of both wells?
0

#1

Tell us what’s happening:
Just wondering why the function $(".target:nth-child(2)").addClass();targets 2nd .target child of both the #left-well & #right-well divs. I would have thought it would count them all as a set and only target the 2nd .target of the #left-well since that comes first.

Can someone please explain. Thanks =)

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");
    $(".target: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 nth-child(n) selector matches every element that is the nth child, regardless of type, of its parent. There are two parents (left-well and right-well) containing elements with class=“target”.


#3

Thanks Randell :grinning: That makes sense. What if I wanted to target the nth child of only a specific parent?


#4

If you wanted to just target the nth-child(2) for class=“target” for the div with id=“right-well”, you would use:

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

#6

Can you please explain this further. I tried searching this further. What is meant by matches every element that is the nth child. I did not get what matching every element is. Also what is the class target?


#7

Using the code in the OP’s original post and only look at:

 $(".target:nth-child(2)")

The .target references any element with class=“target”. When the :nth-child(number) part is added, then it will reference elements with class=“target” which are in the number position of their parent element. In this example above, the number 2 means find all elements with class=“target” that are the 2nd child of their parent element.

The class target is just a made up class name which does not have a css definition like the other classes, but is just used to be able to reference the elements in this particular challenge. In the example, I could replace the name “target” with “target-this-element” through the code and it would work the same.

<script>
  $(document).ready(function() {
    $(".target-this-element: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-this-element" id="target1">#target1</button>
        <button class="btn btn-default target-this-element" id="target2">#target2</button>
        <button class="btn btn-default target-this-element" 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-this-element" id="target4">#target4</button>
        <button class="btn btn-default target-this-element" id="target5">#target5</button>
        <button class="btn btn-default target-this-element" id="target6">#target6</button>
      </div>
    </div>
  </div>
</div>