JQuery选择器排除逻辑不起作用

时间:2017-02-16 15:09:55

标签: jquery

我有一堆 元素, href 值为#slider-5 #slider-6 #slider-7 ,依此类推。还有一些其他 元素, href 值包含,但格式不同。我想编写一个选择器逻辑,仅针对第二种 元素,即 href 中包含的元素,但不包含<<>强> #slider 即可。这就是我写的:

$('a[href*=#]:not([href=#], [href=#slider])')

但是,这种逻辑似乎并不尊重 #slider 排除逻辑。

我需要选择包含 的所有 标记,但不包括以下内容:

  • 仅包含
  • 包含,后跟滑块

2 个答案:

答案 0 :(得分:2)

您可以使用选择器:$('a[href*="#"]:not([href="#"], [href^="#slider"])')

答案 1 :(得分:1)

使用.filter()函数来过滤元素,而不是尝试实现一些奇怪的CSS选择器。

$(document).ready(function() {
  $('a')
    .filter(function() {
      return $(this).attr('href').indexOf('#slider-') == 0;
    })
    .addClass('selected');
})
a {
  text-decoration: none;
  color: inherit;
}

.selected {
  border-bottom: 1px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#slider-1">Slider-1</a><br/>
<a href="#slider-2">Slider-2</a><br/>
<a href="#slider">Slider</a><br/>
<a href="#">#</a>