2017-03-08 4 views
0

클릭시로드되는 조각이 있습니다. css-tricks에있는 링크를 통해 페이지를 스크롤합니다. 나는 다음과 같은 오류가 발생합니다 : catch되지 않은 오류 : 구문 오류, 인식 할 수없는 표현 : #! Fragment_NamejQuery가 hashbang으로 표현식을 인식하지 못합니다.

내 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; 
     } 
    } 
    }); 
}); 

HTML

내가 시도
<li><a href="#!Fragment_Name">Link Text</a></li> 

VAR 대상 = $ ($ (이 .해시시)); 기쁨이 없음

모든 것이 여전히 작동하므로이 문제를 해결하고 콘솔에서 오류를 제거하는 방법을 알고 싶습니다.

답변

1

당신은 단순히 탈출 .replace를 사용할 수있는 ! :

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

나는 var target = $ (this.hash)를 바꿨다. var target = $ (this.hash.replace (/ ([!])/g, "\\ $ 1")); 이제 오류는 읽지 않은 오류를 읽습니다. 구문 오류, 인식 할 수없는 표현식 : [name =! Fragment_Name] –

+1

@DirtyBirdDesign 두 번째 선택자입니다 ($ ('[name ='+ this.hash.slice (1) + ']'); '). '='와''''다음에 따옴표를 추가하십시오 :'$ ('[name = "'+ this.hash.slice (1) + '"]'); ' –

+0

우수! 결합 된 두 가지. 나는/[!]/g이 정확히 무엇을하는지 이해하지 못한다. 나는 그것이 "!" 그러나 이유는 아닙니다. 두 번째 부분은 슬라이스에서 "#"을 이스케이프 처리합니다. 대단히 감사합니다. –

-1

JQuery 선택기에 특수 문자가 있기 때문입니다. 를 제거하십시오! 귀하의 href에서 그것은 괜찮을 것입니다.

+0

구글이 AJAX 콘텐츠를 크롤링 때문에 그렇게 할 수는/hashbang 필요 '#!'. –