检查单击的链接href是否不以哈希标记开头

时间:2013-11-27 19:34:48

标签: javascript jquery

这就是我可以选择href不以#开头的所有链接:

$('a:not([href^="#"])')

但是如何确定某个链接是否有一个以哈希标记开头的href? AFTER 点击它?这失败了:

$('a').on('click', function() {
   if($(this).is('[href^="#"])')) {
     alert('No hash');
   }
});

4 个答案:

答案 0 :(得分:4)

您从选择器中删除了:not()。把它放回来它应该有效。

if($(this).is('a:not([href^="#"])')) {

DEMO: http://jsfiddle.net/8An48/


或更好......

if (this.getAttribute("href").charAt(0) !== "#") {

DEMO: http://jsfiddle.net/8An48/1/


或者使用包含所有a元素的最近祖先的事件委派。

$('body').on('click', 'a:not([href^="#"])', function() {
     alert('No hash');
});

DEMO: http://jsfiddle.net/8An48/2/

答案 1 :(得分:0)

尝试:

$('a').on('click', function() {
   if(($(this).attr('href').substr(0,1)) != '#') {
     alert('No hash');
   }
});

答案 2 :(得分:0)

$('a').on('click', function() {
   if($(this).attr("href").indexOf("#") === -1) {
     alert('No hash');
   }
});

解释

$(this).attr("href") - 获取所点击链接的href属性的值

.indexOf("#") - 如果字符串A包含它,它将返回字符串B的位置。否则返回false

=== -1 - 三等于,-1确保这是100%假(并且不等于字符串或数字)

答案 3 :(得分:0)

您可以使用.filter()

$('a').filter(function(){
  return this.href.slice(0, 1) !== '#';
}).addClass('does-not-start-with-hash');