jQuery / JS - 如何在条件中排除具有特定 href 的 <a>?

jQuery / JS - How can I exclude <a> with specific href in conditions?

我试图根据它们的 href 值将特定 <a> 排除到 if 语句中。更具体地说,我在单击任何 <a> 时显示预加载器 div,触发 javascript 或包含 # 的除外。 这让我的用户在等待页面加载时看到一个漂亮的屏幕。

我写过这个小js东西:

$('a').click(function() {
  var href = $(this).attr('href');

  //my conditions
  if ((href != '#') || (href != 'javascript:void(0);')) {
    $('#preloader').fadeIn("fast");
  }
});

//Showing preloader
$(window).load(function() {
  $('#preloader').fadeOut("slow");
});

我的声明排除了包含 # 的链接,但对于那些包含 javascript:void(0); 的链接,它不会。这是我的问题。 我究竟做错了什么?语句或值是否有错误?

我可以想到两种直接的方法来解决给定代码的问题:

  1. 您的条件不正确。 if((href != '#') || (href != 'javascript:void(0);')) 应该是 if(href != '#' && href != 'javascript:void(0);')

  2. 最好从查询本身中排除不相关的元素:

$('a').not('[href="#"]').not('[href="javascript:void(0);"]).click(function() {
    $('#preloader').fadeIn("fast");
});

参见 jQuery 的 Attribute Not Equal Selector

这个答案可能对某人有帮助..和另一种检查方式

if($(this).is(':not([href^="#"]):not([href^="javascript:"])')){
   $('#preloader').fadeIn("fast");
}

$('a').on('click',function(e){
 e.preventDefault();
 if($(this).is(':not([href^="#"]):not([href^="javascript:"])')){
   alert('Good');
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="javascript:void(0);">
  click
</a><br />
<a href="#">
  click
</a><br />

<a href="go">
  click
</a><br />