这就是我可以选择href不以#
开头的所有链接:
$('a:not([href^="#"])')
但是如何确定某个链接是否有一个以哈希标记开头的href? AFTER 点击它?这失败了:
$('a').on('click', function() {
if($(this).is('[href^="#"])')) {
alert('No hash');
}
});
答案 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');
});
答案 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');