JQuery当第二个孩子是最后一个孩子时,最后一个孩子不能工作

时间:2017-02-01 11:25:25

标签: jquery

 <ul>
      <li class="js"><span>JavaScript</span></li>
      <li class="js"><span>Python</span></li>
      <li class="jsa"><span>Swift</span></li>
 </ul>

另见link

我不知道我对孩子们的理解是不是是正确的,但在这种情况下,我认为JavaScript和Python是元素的两个孩子,类是&#39; js&#39;。使用$('li').filter('li.js:first-child')我可以获得JavaScript#,但我无法获得Python&#39;使用$('li').filter('li.js:last-child')

所以我觉得这种情况证明了JavaScript&#39;和#&#39; Python&#39;是具有班级&#39; js&#39;

的元素的孩子

然而,对我来说奇怪的是,当我制作斯威夫特&#39;有班级&#39; js&#39;,

 <ul>
      <li class="js"><span>JavaScript</span></li>
      <li class="js"><span>Python</span></li>
      <li class="js"><span>Swift</span></li>
 </ul>

使用$('li').filter('li.js:last-child')可以获得Swift&#39;

另外,我知道我可以使用:最后我得到了Python&#39;当它是第二个和最后一个同时。但我不明白为什么:last-child在同样的情况下无效。

感谢您的时间!

1 个答案:

答案 0 :(得分:1)

使用:last代替last-child,因为last-child会查找父容器的最后一个子容器,例如ul,在您的情况下为.jsa当你像现在这样做的时候。另外,如果没有li,你不应该li添加<ul>,我的意思是你可以,但它不对。试试这个:

&#13;
&#13;
//$('li').filter('li.js:last-child')
$('.js:last').click(function() {
  $('<li><span>C#</span></li>').appendTo($('li').filter('.js'));
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="test-div">
  <ul>
    <li class="js"><span>JavaScript</span>
    </li>
    <li class="js"><span>Python</span>
    </li>
    <li class="jsa"><span>Swift</span>
    </li>
  </ul>
</div>
Use `:last` because `last-child` select only the last-child of a parent:

<h2>Greetings</h2>
<div class="container">
  <div class="inner">Hello</div>
  <div class="inner">Goodbye</div>
</div>
&#13;
&#13;
&#13;