【问题标题】:jQuery / JS - How can I exclude <a> with specific href in conditions?jQuery / JS - 如何在条件中排除具有特定 href 的 <a>?
【发布时间】:2016-05-18 12:36:57
【问题描述】:

我试图根据 href 的值将特定的 &lt;a&gt; 排除在 if 语句中。更具体地说,当单击 &lt;a&gt; 时,我将显示一个预加载器 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); 的链接,它不会代替。这是我的问题。 我究竟做错了什么?语句或值是否有错误?

【问题讨论】:

  • 您能否为您的示例提供一些标记?乍一看,您的处理程序应该正常工作。也许你的锚的href有错别字
  • @Seth 谢谢你的回复,我已经修复了它,实现了下面的答案。祝你有美好的一天。

标签: javascript jquery preloader


【解决方案1】:

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

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

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

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

参见 jQuery 的Attribute Not Equal Selector

【讨论】:

  • 我不同意你的第一句话。它不应该是逻辑 AND,因为 href 包含 #javascript:void(0);。如果它包含两者,那么有人做错了。 OP 也要求它用于 OR。但是,您使用 .not 的建议绝对是 OP 正在寻找的
  • 炸弹!我已经尝试并改进了第二种方法。非常感谢您的帮助。
  • @Seth,条件被否定,所以&amp;&amp; 是你想要的:href 属性是不是 # 而不是的锚 javascript:void(0);: JSFiddle
【解决方案2】:

此答案可能对某人有所帮助..以及另一种检查方式

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 />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多