Попытка использовать метод .addClass jQuery с навигацией - PullRequest
3 голосов
/ 11 февраля 2011

У меня есть Nav, в которой я пытаюсь использовать метод addClass jQuery, чтобы установить цвет ссылки последней нажатой ссылки. проблема тогда я должен использовать removeClass на всех других ссылках в Nav. вот с чем у меня проблемы.

Я написал код наивно, но знаю, что это плохое программирование. ниже приведен код с таблицей стилей ref.

jQuery('#shop-nav').click(function(){
    jQuery("#shop-nav").addClass("clicked");
    jQuery("#art-nav").removeClass("clicked");
    jQuery("#obj-nav").removeClass("clicked");
    jQuery("#acc-nav").removeClass("clicked");
});

jQuery('#art-nav').click(function(){
    jQuery("#art-nav").addClass("clicked");
    jQuery("#shop-nav").removeClass("clicked");
    jQuery("#obj-nav").removeClass("clicked");
    jQuery("#acc-nav").removeClass("clicked");
});

и т.д.. и т.д.!

HTML-код

<div id="nav-cell-1" class="grid f-cell nav-cell">
<ul id="main-nav" class="nav clearfix">
    <li><a href="#" id="shop-nav">Shop</a>
        <ul id="shop-cats">
            <li><a href="#" id="art-nav">Art</a></li>
            <li>&#8226;</li>
            <li><a href="#" id="obj-nav">Objects</a></li>
            <li>&#8226;</li>
            <li><a href="#" id="acc-nav">Accessories</a></li>
        </ul>
    </li>
</ul>
</div>

CSS:

a:link, a:visited {color:#cfb199;text-decoration:none} /* official this color:#9d9fa1; work color: #222*/
a:active, a:hover {color:#9d9fa1;text-decoration:none} /* old color:#9d9fa1; */ /* official color:#cfb199; work color: #f00*/
a:link.clicked, a:visited.clicked {color:green;text-decoration:underline}

демонстрационный сайт находится здесь: http://www.tomcarden.net/birdycitynav/partial-nav-demo.html

Я решил часть проблемы, используя ссылку this, но она не включает часть .removeClass.

jQuery('#shop-cats>li>a').click(function(){
    jQuery(this).addClass("clicked");
});

Ответы [ 5 ]

3 голосов
/ 11 февраля 2011

Или этот работает больше как ваш сайт:

$('.nav a').click(function(){
    $('.nav a').removeClass('clicked');
    $(this).toggleClass('clicked');
});

протестируйте здесь: http://www.jsfiddle.net/mjYq3/18/

0 голосов
/ 11 февраля 2011

Это должно работать:

$('#main-nav a').click(function() {
    $('#main-nav a').not(this).removeClass('clicked');
    $(this).addClass('clicked');
});

На основании того, что вы, очевидно, хотите сделать это для всех ссылок, которые являются потомками #main-nav, а не только для тех,внутренний <ul> список.

0 голосов
/ 11 февраля 2011

Не проверено

jQuery('#shop-cats>li>a').click(function(){
    $this = jQuery(this);
    $this.parent().children('a').removeClass('clicked');
    $this.addClass("clicked");
});
0 голосов
/ 11 февраля 2011

Вы можете сначала удалить все выбранные классы, а затем добавить их обратно к тому, который был нажат.

jQuery('#shop-cats>li>a').click(function(){
  jQuery('#shop-cats>li>a').removeClass("clicked")
  jQuery(this).addClass("clicked");
});
0 голосов
/ 11 февраля 2011

Попробуйте переключить класс:

var navs = jQuery('#shop-nav,#art-nav, #obj-nav, #acc-nav');
navs.click(function(){
    navs.removeClass("clicked");
    $(this).addClass("clicked");
});
...