我有这个Chrome扩展程序,它会在你的戳下添加一个戳戳所有按钮。我正在尝试更新它,所以当你有6个或更多时,“显示所有(6)”使它刷新我的戳所有按钮。 [因为当你点击“全部显示(6)”时它会消失。所以在我的代码中,这就是我添加按钮的方式:
$("#pagelet_pokes a:last").after(html_code)
所以在facebook中有一个div为id =“pagelet_pokes”,它有大量的子div,最后有一个div w / class ='phs',带有a,并且在该列表中是戳链接
简化:
<div id='pagelet_pokes'>
...
<div class='phs'>
<ul>
<li><div><div><a href>Poke #1</a></div></div></li>
<li><div><div><a href>Poke #2</a></div></div></li>
</div>
</div>
所以jQuery在最后一个之后添加了我的按钮。这很好。
问题是,“全部显示(6)”会增加另一个&lt; li&gt;在底部,当点击时,它隐藏自己而不是删除它[display = none]。所以在上面的代码之后,它补充说:
<li class='showAll'>
<a href='#'>
<span class='fwb'>Show all (6)</span>
</a>
</li>
现在,我尝试将我的javascript中的代码更改为:
$("#pagelet_pokes a:last").not('.showAll').after(html_code)
它不起作用,因为,第一个选择器选择所有&lt; a&gt; s,然后丢弃任何具有.showAll的那个,但这没有用,因为.showAll在子节点中!
所以我的问题归结为这个..如何选择#pagelet_pokes中的最后一个“a”,不是否具有“pokeAll”类的子跨度?有一些“!”可能像这样工作的选择器? :$('#pagelet_pokes !li.showAll a:last')
?谢谢!
答案 0 :(得分:5)
$('#pagelet_pokes li:not(.showAll) a:last')
或者让您的选择器对querySelectorAll
有效(在可能的情况下在内部使用):
$('#pagelet_pokes li:not(.showAll) a').last()
修改强>
我无法从这个问题中说出来,但是如果您要排除的最后一个li
总是那么,那么我倾向于保持选择器简单,并在结果上使用slice()
[docs]方法:
$('#pagelet_pokes li a').slice(0, -1);