2016-05-10 10 views
1

内部アンカーリンクへのスムーズなスクロールを実装するには、次のコードを使用します。コードはPCおよびAndroidでは動作しますが、Appleデバイスでは動作しません。CSSを使用する:jqueryでセレクタを使用しない

// The function used for smooth scrolling internal links 
jQuery(document).ready(function($) { 

    var topbanner=$("#top-banner").css("height"); 
    var navbar=$(".navbar").css("height"); 
    var brand=$(".brand").css("height"); 
    var gap =$(".page-style").css("margin-top"); 

    topbanner = (isNaN(topbanner = parseInt(topbanner, 10)) ? 0 : topbanner), 
    navbar = (isNaN(navbar = parseInt(navbar, 10)) ? 0 : navbar), 
    brand = (isNaN(brand = parseInt(brand, 10)) ? 0 : brand), 
    gap = (isNaN(gap = parseInt(gap, 10)) ? 0 : gap), 

    topmargin=topbanner+navbar+brand+gap; 


    $('a[href*="#"]:not([href*="tab"]').click(function() { 
    if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 

     var target = $(this.hash); 

     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 

     if (target.length) { 
     $('html, body').animate({ 
      scrollTop: target.offset().top-topmargin 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 

問題は行にあります。アンカーは#tabから始まるが、これはAppleデバイス上で動作していないよう、それが認識されない文ですというエラーをスローしない限り、私はアンカーをクリックする上で動作するようにそれをしたいと思い

$('a[href*="#"]:not([href*="tab"]').click(function() { 

。それが動作するようにコードを修正する方法はありますか?

+1

あなたはタイプミスがあります。 'a [href * ="# "]:not([href * =" tab "]'は最後に ')'がありません。あなたのコードはおそらくどこでも働くことができませんでした。 – BoltClock

+0

FF、IE、Androidで動作します。 – Naz

+0

あなたは正しいです、私はちょうど[この質問](http://stackoverflow.com/questions/29120822/how-why-is-attribute-string-a-valid-queryselector-js-bug)にコメントしたことを思い出しました。無効であるにもかかわらず特定のブラウザで動作するように見えるいくつかのquerySelectorAllセレクタがリストされています。 – BoltClock

答えて

0

「含有」を表す*=セレクタを現在使用しています。あなたがこれを絞り込むしたい場合は、^= starts with selectorを使用してのみ#tabで始まらない<a>タグターゲットにできます。

// Target <a> tags that start with '#' but not '#tab' 
$('a[href^="#"]:not(a[href^="#tab"])').click(function(){ 
     // Your code here 
}); 

するか、あなただけの#tabで始まるものを無視したい場合、あなたはすべてのリンクを含めることができますそしてちょうど:not()ステートメントにこれを追加します。

// Target all <a> tags except those that start with '#tab' 
$('a:not(a[href^="#tab"])').click(function(){ 
     // Your code here 
}); 

ます

enter image description here

0

あなたは削除することもできます:see a working example of this hereことができ、以下に示す「:(...)ではない」の部分は、セレクタを形成し、クリック機能内部のhrefのを確認してください。 #tabで始まる場合は何もせずに戻ることができます。

もちろん、これは必要以上に多くのクリックイベントを発生させます。

編集:ところでセレクターに括弧がありません:not()は決して閉じません。たぶんそれは問題を解決する!

関連する問題