jquery select 所有 <a> 除了一些特殊的 <a>

jquery select all <a> beside some special <a>

对不起标题,不知道怎么形容更好。

我有以下结构:

<div id="content">
  <ul id="linklist">
     <li><a>...</a></li>
     <li><a>...</a></li>
     <li><a>...</a></li>
     <li><a>...</a></li>
  </ul>
  <a>...</a>
  <div> //variable depth of divs
    <a>...</a>
  </div>
</div>

我想 select #link列表中第三个和第四个旁边的所有 links ()。

我已经尝试了一些 jQuery select 或我找不到工作的。

$(":not(#linklist li:gt(2) a) a")

也显示了第三个和第四个 link。我想是因为 li 仍然存在于 "not".

的比赛中

正确的select或问题是什么?

您可以对要从选择中删除的两个索引使用 .not() 方法:

$('#linklist').find('a').not(':eq(2)').not(':eq(3)');

尝试:

$('#linklist li').not('li:nth-child(3)').not('li:nth-child(4)');

或:

$('#linklist li').not('li:gt(1)');

参见:https://jsfiddle.net/eadp1jL5/1/

我会以不同的方式处理它。 为您不想 select 的元素指定一个唯一的 class 名称(即 .ignore

     <li><a>...</a></li>
     <li><a>...</a></li>
     <li><a class="ignore-me">...</a></li>
     <li><a class="ignore-me">...</a></li>

那么你可以简单地做:

a:not(.ignore-me)

这将更易于维护(即,如果您的 link 位置发生变化)并且同样适用于 jQuery 和 CSS。

希望对您有所帮助。

您的 :gt 选择器中的语法有点不对。 :gt 应该在 #linklist a 元素上,索引是从零开始的,所以应该是 1。试试这个:

$('a:not(#linklist a:gt(1))')

Example fiddle

试试这个:

$('#linklist li').not(":eq(3)").not(":eq(2)")