我有这个Chrome扩展程序,它会在你的戳下添加一个戳戳所有按钮.我正在尝试更新它,所以当你有6个或更多时,"显示所有(6)"使它刷新我的戳所有按钮.[因为当你点击"全部显示(6)"时它会消失.所以在我的代码中这是我添加按钮的方式:
$("#pagelet_pokes a:last").after(html_code)
所以在facebook中有一个id ="pagelet_pokes"的div,它有大量的子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>
Run Code Online (Sandbox Code Playgroud)
所以jQuery在最后一个之后添加了我的按钮.这很好.
问题是,"全部显示(6)"在底部添加了另一个<li>,单击时,它隐藏自身而不是删除它[display = none].所以在上面的代码之后,它补充说:
<li class='showAll'>
<a href='#'>
<span class='fwb'>Show all (6)</span>
</a>
</li>
Run Code Online (Sandbox Code Playgroud)
现在,我尝试将我的javascript中的代码更改为:
$("#pagelet_pokes a:last").not('.showAll').after(html_code)
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为,第一个选择器选择所有的<a>,然后丢弃任何具有.showAll的,但这没有用,因为.showAll在子节点中!
所以我的问题归结为这个..我该如何选择最后一个"一" #pagelet_pokes内,但这不是必须与类"pokeAll"孩子跨度?有一些"!" 可能像这样工作的选择器?:$('#pagelet_pokes !li.showAll a:last')?谢谢!
$('#pagelet_pokes li:not(.showAll) a:last')
Run Code Online (Sandbox Code Playgroud)
或者使您的选择器有效querySelectorAll (在可能的情况下在内部使用):
$('#pagelet_pokes li:not(.showAll) a').last()
Run Code Online (Sandbox Code Playgroud)
编辑:
我无法从这个问题中说出来,但是如果li你要排除的最后一个总是在那里,那么我倾向于保持选择器简单,并在结果上使用slice()[docs]方法:
$('#pagelet_pokes li a').slice(0, -1);
Run Code Online (Sandbox Code Playgroud)