2017-03-08 10 views
0

私はクリックで読み込まれる断片があります。 css-tricksにあるこれらのリンクの上にページをスクロールします。私は次のエラーを取得する:不明なエラー:構文エラー、認識できない表現:#!Fragment_NamejQueryがハッシュバンで式を認識できない

私のjsが

$(function() { 
    $('a[href*=#]:not([href=#])').click(function() { 
     if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { 
     var target = $(this.hash);//this is where the error is 
     target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); 
     if (target.length) { 
      $('html,body').animate({ 
      scrollTop: target.offset().top 
     }, 1000); 
     return false; 
     } 
    } 
    }); 
}); 

私はVaRのターゲットを試してみましたHTML

<li><a href="#!Fragment_Name">Link Text</a></li> 

は= $($(この。ハッシュ));喜びはありません

これでも問題はありません。これを修正し、コンソールからエラーを取り除く方法を知りたいだけです。

答えて

1

あなたは、単にエスケープする.replaceを使用することができます!

$(this.hash.replace(/([!])/g, "\\$1")) 
+0

私はvar target = $(this.hash)を置き換えました。 var target = $(this.hash.replace(/([!])/ g、 "\\ $ 1"));エラーは次のようになりました:Uncaught Error:Syntax error、unrecognized expression:[name =!Fragment_Name] –

+1

@DirtyBirdDesignこれはあなたの2番目のセレクタ( '$ ['[name =' + this.hash.slice(1)+ ']')です。 ')。 '' ''の前と '' 'の前に引用符を付けるだけです:' $( '[name = "' + this.hash.slice(1)+ '"]'); ' –

+0

優秀! 2つを組み合わせて働いた。私は/ [!]/gが正確に何を理解していないのですか?私はそれが "!"をエスケープしていることを知っています。しかし理由はありません。 2番目の部分は、スライスの "#"をエスケープして取得します。大変ありがとうございました! –

-1

これは、JQueryセレクタに特殊文字があるためです。 !を削除!あなたのhrefからそれは大丈夫です。

+0

GoogleはAJAXコンテンツをクロールしてそれを行うことはできません、/ hashbangを必要とする '#!'。 –

関連する問題