2013-04-16 6 views
3

새로운 코더를 사용하면 문제가 생겨서 고맙게 생각합니다.CSS를 현재 페이지와 jQuery 링크로 바꾸기

현재 페이지에 적용되는 링크를 인식하고 해당 링크에 다른 CSS 스타일을 적용하는 코드를 작성하고 싶습니다. 나는이 문제를 연구하여 jQuery를 사용하여 현재 링크를 확인한 다음 새로운 클래스를 적용하는 것이 가장 효과적이라는 것을 발견했다 (예 : "현재"). 그러나 사이트에서이를 구현하려고 시도했을 때 작동하지 않았습니다.

내가 함께 일하고 있어요 HTML입니다 :

<nav class="main-nav"> 
    <a href="http://website.com" class="main-nav-link"> 
     <span class="main-nav-item" id="nav-content"></span> 
    </a> 
    <a href="http://website.com/calendar" class="main-nav-link"> 
     <span class="main-nav-item" id="nav-calendar"></span> 
    </a> 
    <a href="http://website.com/profile" class="main-nav-link"> 
     <span class="main-nav-item" id="nav-profile"></span> 
    </a> 
</nav> 

그리고 이것은 제가 적용 한 CSS입니다 :

.main-nav .main-nav-item { 
    height: 50px; 
    width: 150px; 
} 

.main-nav #nav-content { 
    background: url('/images/content-inactive.png') no-repeat center; 
} 

.main-nav #nav-calendar { 
    background: url('/images/calendar-inactive.png') no-repeat center; 
} 

.main-nav #nav-profile { 
    background: url('/images/profile-inactive.png') no-repeat center; 
} 

내 목표는 내 스팬에 대한 background:을 변경하는 것입니다 현재 페이지의 <a> 여기

이 문제를 해결 한 다른 StackOverflow의 스레드하지만 나 해결책에 도달하는 데 도움이되지 않은 :

그것은 나에게 완전히 명확하지 않다을 내가 자바 스크립트를 넣어야하는 곳이지만, 현재 <script type="text/javascript"></script> 사이에 <header> 섹션에 있습니다.

미리 도움을 주셔서 감사합니다. :)

-

UPDATE :

나는 현재 페이지에 다음 코드를 가지고 있지만, 그것은 작동하지 않습니다.

자바 스크립트 :

<script> 

     $(document).ready(function() { 

    // Get the current URL 
      var currentUrl = window.location.href; 

      // Get the span you want with a combination class and attribute and child jQuery selector 
      var currentMenuItem = $(".main-nav-link[href='" + currentUrl + "'] > .main-nav-item"); 

      // Then add your class 
      currentMenuItem.addClass("current"); 

     }); 

</script> 

그리고 CSS :

#nav-content.current { 
    background: url('/images/content-active.png') no-repeat center -94px; 
} 

는 jQuery를 활성 링크로 .current 클래스를 추가하지 않는, 그래서 CSS도 할 수있는 기회를 가지고 있지 않습니다 작업. 다음을 사용하여 스크립트 페이지 태그 내부

+0

참고로, [스크립트 태그에'type ='을 사용할 필요가 없습니다.] (http://www.youtube.com/watch?feature=player_detailpage&v=Y2Y0U-2qJMs#t=936s) 사실' text/javascript'는 JS의 MIME 유형이 아닙니다. –

+0

알았어. 팁 주셔서 감사. – Max

답변

2

window.location.href :

그런 다음에 코드의 마지막 라인을 변경할 수 있습니다. 그런 다음 href 속성을 가진 <a class="main-nav-link"> 요소의 <span class="main-nav-item"> 하위를 찾는 jQuery 선택기를 사용해야합니다. 해당 요소에 "현재"클래스를 적용하면 잘 수행해야합니다. 그렇다면이 JavaScript는 어떻습니까?

// Get the current URL 
var currentUrl = window.location.href; 

// Get the span you want with a combination class and attribute and child jQuery selector 
var currentMenuItem = $(".main-nav-link[href='" + currentUrl + "'] > .main-nav-item"); 

// Then add your class 
currentMenuItem.addClass("current"); 

스크립트 태그에 넣고 사용해보십시오.

제대로 작동하면 올바른 CSS 규칙을 추가해야합니다. 예를 들어 #nav-content.current (및 나머지는 모두 나머지 배경 이미지)을로드하는 규칙을 추가합니다.

(현재 CSS에 대한주의 사항 : 당신이 당신의 선택기를 overqualifying 것 같습니다 당신이 페이지에 다른 곳에서는 약 .main-nav-item의 걱정이없는 경우에는 .main-nav 이전에 그 클래스를 자격을 귀찮게하지 않습니다. ID 선택기 (예 : #nav-content)는 고유 한 식별자이기 때문에 자격을 취득 할 필요가 없습니다.)

당신과 도움이되는 희망입니다.

+0

고마워, Dave. 이것은 의미가 있으며 필자는이를 따라 갔지만 활성 링크 내의 span에'current' 클래스를 적용하지 않습니다. 이유는 모르겠지만 ... – Max

+0

정확한 코드를 복사하여 '

'섹션의 '
1

:

$(document).ready(function() { 
    var currentPage = "content"; // <--Change this to the id of your span after the nav- 

    //Change the background color now 
    $("#nav-" + currentPage).addClass("className"); 
}); 
+0

왜 CSS에서이 작업을 수행하지 않습니까? – ahren

+0

OP는 그가 jQuery를 조사 중이라고 말했고 이것은 내가 제공 한 것입니다. – tymeJV

+0

답장을 보내 주셔서 감사합니다, tymeJV. 그러나, 단순히 jQuery를 사용하여 새로운 배경을 직접 적용하는 것이 아니라 활성 링크 내의 스팬에 클래스를 추가하기 만하면됩니다.이 이유는 활성화 된 링크에 따라 서로 다른 배경이 있다는 것입니다. . – Max

2

이 작업을 수행하는 일반적인 방법은, 당신의 활성 페이지 링크 서버 측에 "활성"같은 클래스를 추가하는 것입니다.

$('.active').css('background-image','images/activebg.png'); 

을하지만 당신이 언급 한 바와 같이, 각 "활성"요소에 대한 다른 배경을해야하고, 해당 링크를 사용하려면 : 당신은 다음과 같이 jQuery를 사용하여 요소의 스타일을 할 수있다. (나는 당신이 URL을 의미한다고 생각한다).

이 같은 현재 페이지의 URL을 얻을 수 있습니다 : 지금 당신은 활성 배경을 설정할 수 있습니다 그래서

var $link = $('.main-nav a[href='+current_url +']'); 

:

var current_url = window.location.href; 

당신은 다음과 같이 현재의 URL로 링크를 선택할 수 있습니다 이 같은 현재 페이지 링크 : 이제

$link.css('background-image','images/activebg.png'); 

, 당신은 전자에 대한 사용자 정의 활동적인 배경이있는 경우

<a href="http://website.com" class="main-nav-link" hover_img="/images/hover-home.png" > .... 
<a href="http://website.com/calendar" class="main-nav-link calendar" hover_img="/images/hover-calendar.png"> .... 

등 : ACH 링크, 나는 당신이 가져가 URL을 제공하는 자신의 속성 hover_img 또는 무언가를 창조 건의 할 것입니다. 현재의 URL을 얻을 것이다

$link.css('background-image',$link.attr('hover_img')); 
+0

답장을 보내 주셔서 감사합니다.하지만 답변에 다소 혼란 스럽습니다. "current_url"변수를 활성 페이지로 정의하는 첫 번째 부분을 얻었고 "current_url"을 가리키는 링크로 "$ link"변수를 정의하는 두 번째 부분을 이해한다고 생각합니다. 달러 기호 사용). 그러나, 당신이 나 자신의 속성을 만들 것을 제안했을 때 당신은 나를 잃어 버렸습니다. '.addClass' 함수를 사용하여 활성화 된 ''또는 활성화 된' '내의' '에 고유 한 클래스를 부여하는 것이 가장 쉬운 방법일까요? – Max

+0

변수가 jQuery 객체 일 때마다 변수에 $를 추가하기 만하면됩니다. 당신은 그렇게 할 필요가 없습니다. 하지만 jQuery를 자주 사용하면 더 명확 해집니다.또한 addClass를 사용하여 실제로 클래스를 활성으로 설정할 수 있습니다. 마지막 두 블록의 코드는 각 활성 링크마다 다른 배경 이미지가 필요한 경우에만 유용합니다. 필요 없다면,'$ link.addClass ('.active')'로 가서 CSS의 적절한 배경을 정의 할 수 있습니다. –

관련 문제