检测锚是否链接到ID

时间:2013-08-10 14:50:40

标签: jquery

单击锚点时,我想进行平滑滚动,但首先我要检查锚链接是否链接到id。如果只有哈希那么就不要做滚动。

像:

<a href="#">do not scroll</a>

<a href="#anyID">Yes do the scroll</a>

我当前的代码滚动点击每个只有哈希的锚。

请修复我的代码,以便在锚只有哈希

时不会滚动
$('a[href^="#"]').click(function (e) {
    e.preventDefault();
    var target = this.hash;

    if (typeof($(target).offset()) != 'undefined') {
        $('html, body').animate({
            scrollTop: $(target).offset().top - 60
        }, 1000);
    }
});

3 个答案:

答案 0 :(得分:3)

尝试

$('a[href^="#"]').click(function (e) {
    e.preventDefault();
    var target = $(this.href);

    if (target.length && target.is(':visible')) {
        $('html, body').animate({
            scrollTop: $(target).offset().top - 60
        }, 1000);
    }
});

答案 1 :(得分:2)

如果您确定每个不仅包含哈希的锚点都存在一个元素,那么您可以将选择器更改为:

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

尽管如此,明确地测试元素的存在也是好的。

答案 2 :(得分:1)

$('a').click(function(){
 var href=$(this).attr('href');
 if(href!="#"){
  $('html, body').animate({
   scrollTop: $(href).offset().top - 60
  }, 1000);
 }
});