我有很多.not()(排除)我怎么能只做一行

时间:2017-06-11 12:17:49

标签: jquery

我为页面转换编写了一个代码,但问题是我有很多(链接转到同一页面)要排除,我可以只做一行吗?

$('a')
.not('[href="#"]')
.not('[href="#navShow"]')  // the problem
.not('[href="#navHide"]')  // the problem
.not('[href="#about"]')  // the problem

.click(function () {
});

2 个答案:

答案 0 :(得分:3)

.not接受一个选择器,包括selector group。所以:

$('a').not('[href="#"], [href="#navShow"], [href="#navHide"], [href="#about"]').click(function () {
});

或改为使用:notCSS docsjQuery docs):

$('a:not([href="#"]):not([href="#navShow"]):not([href="#navHide"]):not([href="#about"])').click(function () {
});

(与.not不同,:not不能接受选择器组,只能接受一个简单的选择器。但我们可以在整个选择器中链接它们。)

那就是,您可以考虑为您为此选择或不想为此选择的a元素添加一个类,并使用该类(有或没有not取决于你去哪个方向)而不是单独进行href检查。

答案 1 :(得分:0)

您还可以在CSS的:not伪类选择器属性列表中链接多个逗号分隔的属性。下面显示的是带有font-weight的链接列表:粗体用于演示目的。

虽然这在桌面上至少运行Chrome和Safari,但我不确定它是否是当前标准的一部分,即将发布,还是非标准的。例如,我无法找到MDN上记录的行为,但我确实在a comment on SO中找到了它。



$('a:not([href="#b"], [href="#c"], [href="#e"])').each(function(idx, val) {
  $(val).css('font-weight', 'bold');
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li><a href="#a">link a</a></li>
  <li><a href="#b">link b</a></li>
  <li><a href="#c">link c</a></li>
  <li><a href="#d">link d</a></li>
  <li><a href="#e">link e</a></li>
  <li><a href="#f">link f</a></li>
</ul>
&#13;
&#13;
&#13;