jquery排除如果孩子跨越某个班级?

时间:2011-06-25 14:16:15

标签: jquery

我有这个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')?谢谢!

1 个答案:

答案 0 :(得分:5)

使用not-selector[docs]

$('#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);