2013-09-18 5 views
-1

Я новичок в JQuery, я знаю, этот вопрос уже ответил на другие должности, но, пожалуйста, помогите мне в этом, Как я могу изменить класс <li> тега, если ссылка <a> является нажал?JQuery класс изменения при нажатии ссылки

<li class="link" id="home" > 
    <a href="admin?main=home">Home</a> 
</li> 
<li class="link" id="flt" > 
    <a href="admin?main=flt">FLT</a> 
</li> 

Это то, что я пытался до сих пор:

$('li').click(function() { 
    $("li.active").removeClass("active"); 
    $(this).addClass('active'); 
}); 

Пожалуйста, объясните мне ответ, другие сообщения, похожий на мой, не так много деталей, так что я действительно не понять, как они это делают?

+2

Если вы щелкаете на 'Ā' элемент, расположение страницы изменится таким образом, безусловно, изменения класса на' li' является излишним? Если у вас нет кода, который делает запрос AJAX на 'a.click()' –

+1

Если ссылки перемещаются, это бесполезно, так как страница, перемещающаяся на новую страницу, удалит класс! – epascarello

+0

@epascarello ваше право я никогда не думал об этом. Как я могу это решить? – user2785929

ответ

1

Используйте следующий скрипт. http://jsfiddle.net/czG8h/

$('.link a').click(function() { 
    $("li.active").removeClass("active"); 
    $(this).closest('li').addClass('active'); 
}); 

Если вы хотите, чтобы сохраняться активный стиль по всей странице, то следующий код будет делать трюк для вас:

$(document).ready(function() { 
     var pageTitle = window.location.pathname.replace(/^.*\/([^/]*)/ , "$1"); 

     ///// Apply active class to selected page link 
     $('.link a').each(function() { 

      if ($(this).attr('href').toLowerCase() == pageTitle.toLocaleLowerCase()) 
       $(this).closest('li').addClass('active'); 
     }); 

    }); 
+0

Что означает эта строка '$ (" li.active ")'? – user2785929

+0

Это означает, что у меня класс активен. то есть.

  • . Вся строка означает, что если активная li удаляет из нее активный класс. –

    +0

    похоже, что этот подход не работает, если ссылка имеет ресурс, как бы я решил, есть ли ресурс, с которым нужно работать? как бы я выбрал последнюю ссылку? часть вышеприведенного кода - это заголовок страницы, который включен во все эти URL-адреса в ссылках. Они используют один и тот же заголовок страницы. – user2785929

    2

    При нажатии на элемент, фактическая цель клика является a Элемент, действие по умолчанию которого предназначено для перехода к ресурсу, указанному в свойстве href.

    В этом случае вы регистрируете событие click в событии li, этот обработчик запускается из-за event bubbling, где событие, происходящее в элементе потомка, будет закручиваться до корня документа.

    Таким образом, решение состоит в том, чтобы предотвратить действие по умолчанию события click (в данном случае навигацию элемента a), вызвав .preventDefault() на событие.

    var $lis = $('li').click(function(e) { 
        $lis.filter(".active").removeClass("active"); 
        $(this).addClass('active'); 
        e.preventDefault() 
    }); 
    
    +0

    Я попытался надеть скрипт, но он не работает, даже я удаляю ресурс по ссылке. – user2785929

    +0

    'lis.filter (". Active ").removeClass ("active") 'добавит" активный "в класс? – user2785929

    +0

    @ user2785929 он удаляет класс 'active' из элементов' li', имеющих этот класс –

    0

    Используйте .closest, чтобы добраться до родительского лития и добавить класс активные затем использовать брат и сестра, чтобы найти другую Ли и удалить класс активными, и использовать e.preventDefault() для предотвращения изменения страницы.

    $('li a').click(function(e) { 
        e.preventDefault(); 
        $(this).closest('li').addClass('active').siblings('.active').removeClass('active'); 
    }); 
    

    DEMO

    +0

    'e.preventDefault();' остановил мою ссылку, чтобы перейти на другие страницы. – user2785929

    +0

    Я вижу, я думал, что это было то, что вы хотели, тогда вы можете удалить e.preventDefault() @ user2785929 – Anton

    +0

    Если я удалю 'e.preventDefault();' он не сохраняет класс, если он перейдет к URL-адресу – user2785929

    Смежные вопросы